Meine Frage ist ähnlich zu dieser Frage, aber mit ein paar verschiedenen Einschränkungen:
- Ich habe eine große
\n
Wortliste mit Trennzeichen - ein Wort pro Zeile. Die Dateigröße reicht von 2 GB bis zu 10 GB. - Ich muss alle doppelten Zeilen entfernen.
- Der Prozess kann die Liste während des Entfernens der Duplikate sortieren, ist jedoch nicht erforderlich.
- Auf der Partition ist genügend Platz, um die neu ausgegebene eindeutige Wortliste aufzunehmen.
Ich habe beide Methoden ausprobiert, aber beide scheitern mit Fehlern aufgrund von Speichermangel.
sort -u wordlist.lst > wordlist_unique.lst
awk '!seen[$0]++' wordlist.lst > wordlist_unique.lst
awk: (FILENAME=wordlist.lst FNR=43601815) fatal: assoc_lookup: bucket-ahname_str: can't allocate 10 bytes of memory (Cannot allocate memory)
Welche anderen Ansätze kann ich versuchen?
linux
text-processing
uniq
Großwolf
quelle
quelle
Antworten:
Versuchen Sie, sort mit der Option
-o
/ zu verwenden,--output=FILE
anstatt die Ausgabe umzuleiten. Sie können auch versuchen, dasbuffer-size
mit-S
/ einzustellen--buffer-size=SIZE
. Versuchen Sie auch-s
/--stable
. Und lesen Sie die Manpage, die alle Informationen enthält, die ich gegeben habe.Der vollständige Befehl, den Sie verwenden können, funktioniert möglicherweise für das, was Sie tun:
Möglicherweise möchten Sie auch die folgende URL lesen:
http://www.gnu.org/s/coreutils/manual/html_node/sort-invocation.html
Das erklärt sort genauer als die Manpage.
quelle
sort: write failed: /root/tmp/sortVxscLn: No space left on device
. Das Problem ist insofern etwas ärgerlich, als es nicht sofort versagt. Es scheint, als müsste man warten, bis der Speicher erschöpft ist, bevor er fehlerhaft wird.sort
, um ein Dateisystem mit mehr freiem Speicherplatz zu verwenden.