Existe-t-il une meilleure solution pour imprimer des lignes uniques autres qu'une combinaison de sort
et uniq
?
Pour imprimer chaque ligne identique, un seul, dans n'importe quel ordre:
sort -u
Imprimer uniquement les lignes uniques, dans n'importe quel ordre:
sort | uniq -u
Pour imprimer chaque ligne identique une seule fois, dans l'ordre de leur première occurrence: (Pour chaque ligne, imprimez la ligne si elle n'a pas encore été vue, alors en tout cas incrémenter le compteur vu)
awk '!seen[$0] {print}
{++seen[$0]}'
Imprimer uniquement les lignes uniques, dans l'ordre de leur première occurrence: (enregistrez chaque ligne dans seen
, ainsi que dans lines
si c'est la première occurrence; à la fin de l'entrée, imprimez les lignes par ordre d'occurrence, mais seulement celles qui ne sont vues qu'une fois)
awk '!seen[$0]++ {lines[i++]=$0}
END {for (i in lines) if (seen[lines[i]]==1) print lines[i]}'
Certaines versions (la plupart?) De sort
ont un -u
Drapeau qui fait directement la pièce uniq
. Peut-être des restrictions de longueur de ligne en fonction de la mise en œuvre, mais vous aviez déjà celles-ci avec de la nature sort|uniq
.
Pour la dernière partie de la réponse mentionnée dans: Impression des lignes uniques par @gilles comme réponse à cette question, j'ai essayé d'éliminer la nécessité d'utiliser deux hachages.
Cette solution est pour: Imprimer uniquement les lignes uniques, dans l'ordre de leur première occurrence:
awk '{counter[$0]++} END {for (line in counter) if (counter[line]==1) print line}'
Ici, "Counter" stocke un compte de chaque ligne similaire à celle traitée précédemment.
[.____] À la fin, nous imprimons uniquement ces lignes, qui ont une valeur de contre-valeur comme 1.
Perl fonctionne-t-il pour vous? Il peut conserver les lignes dans l'ordre d'origine, même si les doublons ne sont pas adjacents. Vous pouvez également le coder en Python ou awk
.
while (<>) {
print if $lines{$_}++ == 0;
}
Qui peut être raccourci juste
Perl -ne 'print unless $lines{$_}++;'
Fichier d'entrée donné:
abc
def
abc
ghi
abc
def
abc
ghi
jkl
Cela donne la sortie:
abc
def
ghi
jkl