Comment puis-je trouver les lignes uniques et supprimer tous les doublons d'un fichier? Mon fichier d'entrée est
1
1
2
3
5
5
7
7
J'aimerais que le résultat soit:
2
3
sort file | uniq
ne fera pas le travail. Affiche toutes les valeurs 1 fois
sort file | uniq -u
sortira vers la console pour vous.sort file | uniq
montre toutes les valeurs une fois, c'est parce qu'il imprime immédiatement la ligne qu'il rencontre la première fois, et pour les rencontres suivantes, il les ignore simplement.Réponses:
uniq
a l'option dont vous avez besoin:la source
Utilisez comme suit:
la source
uniq -u filea > fileb
sort<filea.txt | uniq>fileb.txt
. Vous avez peut-être oublié les extensions. J'utilise un Mac OS X. vous devez passer d'filea.txt
un autre à un autrefileb.txt
sort
et à quoi sert le pipinguniq
lorsque vous pouvez simplement fairesort -u file -o file
ce que vous faites est de supprimer les valeurs en double, c'est-à-dire que votrefileb
contient1,2,3,5,7
l'OP ne veut que les lignes uniques qui sont2,3
et sont réalisées par l'uniq -u file
extension de fichier n'a rien avec lui, votre réponse est fausse.Vous pouvez également imprimer la valeur unique dans "fichier" à l'aide de la
cat
commande en redirigeant verssort
etuniq
cat file | sort | uniq -u
la source
uniq -u m'a rendu fou parce que cela ne fonctionnait pas.
Donc, au lieu de cela, si vous avez python (la plupart des distributions et serveurs Linux l'ont déjà):
En supposant que vous ayez le fichier de données dans notUnique.txt
Notez qu'en raison de lignes vides, l'ensemble final peut contenir des chaînes «» ou uniquement des espaces. Vous pouvez le supprimer plus tard. Ou évitez tout simplement de copier depuis le terminal;)
#Juste pour info, à partir de la page uniq Man:
"Remarque: 'uniq' ne détecte pas les lignes répétées sauf si elles sont adjacentes. Vous pouvez d'abord trier l'entrée, ou utiliser 'sort -u' sans 'uniq'. De plus, les comparaisons respectent les règles spécifiées par 'LC_COLLATE'."
Une des méthodes correctes pour appeler avec: # sort nonUnique.txt | uniq
Exemple d'exécution:
Les espaces peuvent être imprimés, alors soyez prêt!
la source
Alors que
sort
prend O (n log (n)) temps, je préfère utiliserawk '!seen[$0]++'
est une abréviation pourawk '!seen[$0]++ {print}'
, print line (= $ 0) siseen[$0]
n'est pas zéro. Cela prend plus de place mais seulement O (n) temps.la source
vous pouvez utiliser:
cela trie les données et filtre par valeurs uniques
la source
uniq -u < file
fera le travail.la source
uniq
devrait bien faire si votre fichier est / peut être trié, si vous ne pouvez pas trier le fichier pour une raison quelconque, vous pouvez utiliserawk
:awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
la source
cela a fonctionné pour moi pour un similaire. Utilisez ceci s'il n'est pas arrangé. Vous pouvez supprimer le tri s'il est organisé
la source
Je trouve cela plus facile.
-u
signifie unique.la source
C'était la première que j'ai essayé
Après avoir fait un chat -e tout.
Chaque deuxième ligne a un espace de fin: (Après avoir supprimé tous les espaces de fin, cela a fonctionné!
Merci
la source