Comment 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
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 m'a rendu fou parce que ça ne marchait 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'))
Just FYI, extrait de la page de manuel uniq:
"Remarque: 'uniq' ne détecte pas les lignes répétées, sauf si elles sont adjacentes. Vous voudrez peut-être d'abord trier les entrées ou utiliser 'sort -u' sans 'uniq'. En outre, les comparaisons respectent les règles spécifiées par 'LC_COLLATE'."
Une des méthodes correctes, à 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
Vous pouvez également imprimer la valeur unique dans "fichier" à l'aide de la commande cat
en le connectant à sort
et uniq
.
cat file | sort | uniq -u
uniq -u < file
fera le travail.
Bien que sort
prenne O (n log (n)) temps, je préfère utiliser
awk '!seen[$0]++'
awk '!seen[$0]++'
est une abréviation de awk '!seen[$0]++ {print}'
, ligne d'impression (= 0 $) si seen[$0]
n'est pas nul. Cela prend plus d’espace mais seulement O(n)) temps.
uniq
devrait bien fonctionner 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}'
vous pouvez utiliser:
sort data.txt| uniq -u
ces données de tri et filtrer par des valeurs uniques
sort -d "file name" | uniq -u
cela a fonctionné pour moi pour un semblable. Utilisez ceci si ce n'est pas arrangé. Vous pouvez supprimer le tri s'il est arrangé
C'était la première fois que j'essayais
skilla:~# uniq -u all.sorted
76679787
76679787
76794979
76794979
76869286
76869286
......
Après avoir fait un chat -e tous.sorties
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