Comment imprimer uniquement les lignes qui apparaissent exactement une fois dans un fichier? Par exemple, étant donné ce fichier:
mountain
forest
mountain
eagle
La sortie serait la suivante, car la ligne mountain
apparaît deux fois:
forest
eagle
Utiliser awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
Utilisez sort
et uniq
:
sort inputfile | uniq -u
Le -u
l'option entraînerait uniq
à imprimer uniquement des lignes uniques. Citant de man uniq
:
-u, --unique
only print unique lines
Pour votre contribution, cela produirait:
eagle
forest
Obs: N'oubliez pas de sort
avant uniq -u
car uniq
fonctionne sur lignes adjacentes . Et alors uniq -u
en fait, c'est d'imprimer des lignes qui n'ont pas de lignes voisines identiques, mais cela ne signifie pas qu'elles sont vraiment uniques. Lorsque vous sort
, toutes les lignes identiques sont regroupées et seules les lignes vraiment uniques dans le fichier resteront après uniq -u
.
Vous avez presque eu la réponse dans votre question:
sort filename | uniq -u