Eine Alternative wäre, die Eingabedatei zu teilen, sofern das fachlich möglich ist. Zum Beispiel mit einem Aufteilscript in 100000 Zeilenblöcke
Wer ein leistungsfähiges System hat kann das Schritt für Schritt probieren (Bitte erst alles lesen und über die Hardware und den freienSpeicherplatz nachdenken):
So kann man eine Datei mit 100 Millionen Zeilen erzeugen :
for i in {1..100000000}; do echo $i >> /tmp/zeilen; done
... welche auch eine „attraktive Größe“ hat:
ls -lh /tmp/zeilen
-rw-rw-r-- 1 fastix fastix 848M Feb 10 10:58 /tmp/zeilen
Zerlegen:
Man erzeuge ein temporäres Verzeichnis und wechsle geich hinein:
cd $(mktemp -d)
# eg. /tmp/tmp.JEmaiJh5UX$
... und zerlege die Datei in Stücke a 1000 Zeilen, welche als part.NNNNNNNN (-d -a 8
) gespeichert werden:
time split -l 1000 -da 8 /tmp/zeilen part.
Das geht auf schnellen Geräten (Partitionen!) auch schnell:
real 0m5,870s
user 0m0,686s
sys 0m4,837s
vom Inhalt der einzelnen Dateien kann man sich wie folgt überzeugen:
less part.00000000
...
less part.00099999
Auf weniger leistungsfähigen Systemen nehme man eine kleinere Datei mit z.B. nur 1 Mio Zeilen. (erster Schritt)
Hint:
Um die beachtliche Anzahl von Dateien loszuwerden lösche man entweder das Verzeichnis:
rm -r /tmp/tmp.JEmaiJh5UX
oder die Dateien in einer Schleife:
for f in *; do rm $f; done
letzteres dauert deutlich länger.
Nicht vergessen, die Datei zu löschen:
rm /tmp/zeilen
Handbuch:
man split
oder Ubuntuusers.de->split