Eine riesige (bis zu 2 GiB) Textdatei von mir enthält ungefähr 100 exakte Duplikate jeder Zeile darin (in meinem Fall nutzlos, da die Datei eine CSV-ähnliche Datentabelle ist).
Was ich brauche, ist, alle Wiederholungen zu entfernen, während (vorzugsweise, aber dies kann für eine signifikante Leistungssteigerung geopfert werden) die ursprüngliche Sequenzreihenfolge beibehalten wird. Im Ergebnis soll jede Zeile eindeutig sein. Wenn es 100 gleiche Zeilen wären (normalerweise sind die Duplikate über die Datei verteilt und werden keine Nachbarn sein), soll nur eine der Art übrig bleiben.
Ich habe ein Programm in Scala geschrieben (betrachten Sie es als Java, wenn Sie Scala nicht kennen), um dies zu implementieren. Aber vielleicht gibt es schnellere C-geschriebene native Tools, die dies schneller erledigen können?
UPDATE:der awk '!seen[$0]++' filename
Die Lösung schien für mich gut zu funktionieren, solange die Dateien in der Nähe von 2 GiB oder kleiner waren, aber jetzt, da ich eine 8-GiB-Datei bereinigen soll, funktioniert sie nicht mehr. Auf einem Mac mit 4 GiB RAM und einem 64-Bit-Windows 7-PC mit 4 GiB RAM und 6 GiB Swap scheint es unendlich zu dauern. Und angesichts dieser Erfahrung bin ich nicht begeistert davon, es unter Linux mit 4 GiB RAM auszuprobieren.
Akzeptierte Antwort:
Ein awk
Lösung gesehen auf #bash (Freenode):
awk '!seen[$0]++' filename