$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
Das Ergebnis, das ich brauche, ist die Anzeige aller Zeilen aus der Originaldatei, wobei alle Duplikate (nicht nur die aufeinanderfolgenden) entfernt werden, während die ursprüngliche Reihenfolge der Anweisungen in der Datei beibehalten wird .
Hier, in diesem Beispiel, war das Ergebnis, nach dem ich tatsächlich gesucht habe
aaaaaa
cccccc
bbbbbb
Wie kann ich diese verallgemeinerte uniq
Operation im Allgemeinen ausführen ?
text-processing
uniq
Laser
quelle
quelle
{ if (!seen[$0]++) print }
if
,print
sowie die Klammer und Klammern:awk '!seen[$0]++'
'!LarryWall[$0]++'
für alle awk Sorgen ändern , aber "gesehen" hilft den Leuten, das Programm besser zu verstehen.John hat ein Tool namens
unique
:Dasselbe ohne zusätzliche Tools in einer einzigen Befehlszeile zu erreichen, ist etwas komplexer:
nl
Gibt Zeilennummern vor den Zeilen aus. Wenn wirsort
/uniq
hinter ihnen stehen, können wir die ursprüngliche Reihenfolge der Zeilen wiederherstellen.sed
löscht nur die Zeilennummern danach;)quelle
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
Ich bevorzuge dies zu verwenden:
cat -n
fügt Zeilennummern hinzu,sort --key=2.1 -b -u
Sortiert im zweiten Feld (nach den hinzugefügten Zeilennummern), ignoriert führende Leerzeichen und behält eindeutige Zeilen beisort -n
Sortiert in strenger numerischer Reihenfolgecut -c8-
Bewahren Sie alle Zeichen von Spalte 8 bis EOL auf (dh lassen Sie die von uns angegebenen Zeilennummern weg).quelle
Perl verfügt über ein Modul, das Sie verwenden können und das eine aufgerufene Funktion enthält
uniq
. Wenn Sie also Ihre Daten in ein Array in Perl laden, rufen Sie einfach die folgende Funktion auf, um sie eindeutig zu machen, und behalten dennoch die ursprüngliche Reihenfolge bei.Weitere Informationen zu diesem Modul finden Sie hier: List :: MoreUtils
quelle