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 | uniqne fera pas le travail. Affiche toutes les valeurs 1 fois
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 | uniqne fera pas le travail. Affiche toutes les valeurs 1 fois
sort file | uniqmontre 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:
-u, --unique
only print unique lines
$ cat file.txt
1
1
2
3
5
5
7
7
$ uniq -u file.txt
2
3
Utilisez comme suit:
sort < filea | uniq > fileb
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.txtun autre à un autrefileb.txt
sortet à quoi sert le piping uniqlorsque vous pouvez simplement faire sort -u file -o filece que vous faites est de supprimer les valeurs en double, c'est-à-dire que votre filebcontient 1,2,3,5,7l'OP ne veut que les lignes uniques qui sont 2,3et sont réalisées par l' uniq -u fileextension 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 catcommande en redirigeant vers sortetuniq
cat file | sort | uniq -u
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à):
#Python
#Assuming file has data on different lines
#Otherwise fix split() accordingly.
uniqueData = []
fileData = open('notUnique.txt').read().split('\n')
for i in fileData:
if i.strip()!='':
uniqueData.append(i)
print uniqueData
###Another option (less keystrokes):
set(open('notUnique.txt').read().split('\n'))
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
$ cat x
3
1
2
2
2
3
1
3
$ uniq x
3
1
2
3
1
3
$ uniq -u x
3
1
3
1
3
$ sort x | uniq
1
2
3
uniq -u < file fera le travail.
uniqdevrait bien faire si votre fichier est / peut être trié, si vous ne pouvez pas trier le fichier pour une raison quelconque, vous pouvez utiliser awk:
awk '{a[$0]++}END{for(i in a)if(a[i]<2)print i}'
sort -d "file name" | uniq -u
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é
Je trouve cela plus facile.
sort -u input_filename > output_filename
-u signifie unique.
C'était la première que j'ai essayé
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Après avoir fait un chat -e tout.
skilla:~# cat -e all.sorted
$
76679787$
76679787 $
76701427$
76701427$
76794979$
76794979 $
76869286$
76869286 $
Chaque deuxième ligne a un espace de fin: (Après avoir supprimé tous les espaces de fin, cela a fonctionné!
Merci
sort file | uniq -usortira vers la console pour vous.