Die Verwendung des sort
Befehls ist wahrscheinlich die schnellste Option.
Aber Sie werden wahrscheinlich das Gebietsschema auf C festlegen wollen.
sort -u
meldet keine eindeutigen Zeilen, sondern eine von jedem Satz von Zeilen, die gleich sortiert sind. Im C-Gebietsschema müssen 2 verschiedene Zeilen nicht unbedingt gleich sortiert sein, aber das ist in den meisten UTF-8-basierten Gebietsschemata auf GNU-Systemen nicht der Fall.
Durch die Verwendung des Gebietsschemas C wird außerdem vermieden, dass UTF-8 analysiert und komplexe Sortierreihenfolgen verarbeitet werden müssen, wodurch die Leistung erheblich verbessert wird.
So:
LC_ALL=C sort -u file
Sie können die Leistung auch verbessern, indem Sie ein schnelleres Laufwerk (oder ein anderes Laufwerk als das, auf dem sich die Eingabe- und / oder Ausgabedateien befinden) für die temporären Dateien (mit -T
oder $TMPDIR
Umgebungsvariable) verwenden oder -S
die von einigen sort
Implementierungen unterstützte Option ausprobieren. .
Bei bestimmten Eingaben oder bei langsamer Speicherung kann die Verwendung der --compress-program
GNU-Option sort
(z. B. mit lzop
) zusätzlich zur Speichernutzung die Leistung verbessern.
Nur ein Hinweis für diejenigen, die (zu Recht) beanstanden, dass es nicht die richtige Reihenfolge sein wird :
Ich stimme zu, dass ich als Mensch gerne sehen würde, wie Stéphane zwischen Stefan und Stephanie sortiert , aber:
Also IMO, die Chancen stehen gut, dass Sie sort -u
mit LC_ALL = C immer wollen , wenn Sie eindeutige Zeilen wollen. Und wenn Sie möchten, dass die resultierende Liste in der Sortierreihenfolge des Benutzers sortiert wird, leiten Sie sie sort
erneut an:
LC_ALL=C sort -u | sort
LC_ALL=C sort | LC_ALL=C uniq -c | sort -k2
/tmp
.