Eine riesige (bis zu 2 GiB) Textdatei von mir enthält ungefähr 100 exakte Duplikate jeder Zeile (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 einen signifikanten Leistungsschub geopfert werden) die ursprüngliche Sequenzreihenfolge beibehalten. Im Ergebnis soll jede Zeile eindeutig sein. Wenn es 100 gleiche Zeilen gäbe (normalerweise sind die Duplikate über die Datei verteilt und werden keine Nachbarn sein), wäre nur eine einzige davon übrig.
Ich habe ein Programm in Scala geschrieben (halte es für Java, wenn du nichts über Scala weißt), um dies zu implementieren. Aber vielleicht gibt es schnellere C-geschriebene native Tools, die dies schneller können?
UPDATE: Die awk '!seen[$0]++' filename
Lösung schien für mich in Ordnung zu sein, solange die Dateien in der Nähe von 2 GiB oder kleiner waren, aber jetzt, da ich eine 8 GiB-Datei bereinigen möchte, 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 werden. Und ich bin angesichts dieser Erfahrung nicht begeistert davon, es unter Linux mit 4 GiB RAM zu versuchen.
sort -u
wird wahrscheinlich schneller sein.