pipe to split Verwenden Sie entweder gunzip -c oder zcat, um die Datei zu öffnen
gunzip -c bigfile.gz | split -l 400000
Ausgabespezifikationen zum Split-Befehl hinzufügen.
Wie Sie das am besten machen, hängt davon ab, was Sie wollen:
- Möchten Sie einen einzelnen Teil der großen Datei extrahieren?
- Oder möchten Sie alle Teile auf einmal erstellen?
Wenn Sie einen einzelnen Teil der Datei wünschen , Ihre Idee, gunzip
zu verwenden und head
ist richtig. Sie können Folgendes verwenden:
gunzip -c hugefile.txt.gz | head -n 4000000
Das würde die ersten 4000000 Zeilen auf Standardausgabe ausgeben - Sie möchten wahrscheinlich eine weitere Pipe anhängen, um tatsächlich etwas mit den Daten zu tun.
Um die anderen Teile zu erhalten, würden Sie eine Kombination aus head
verwenden und tail
, wie:
gunzip -c hugefile.txt.gz | head -n 8000000 |tail -n 4000000
um den zweiten Block zu bekommen.
Ist vielleicht eine Reihe davon eine Lösung oder würde das gunzip -genügend Speicherplatz benötigen, um die gesamte Datei zu entpacken
Nein, die gunzip -c
benötigt keinen Speicherplatz - es erledigt alles im Speicher und streamt es dann nach stdout.
Wenn Sie alle Teile auf einmal erstellen möchten , ist es effizienter, sie alle mit einem einzigen Befehl zu erstellen, da dann die Eingabedatei nur einmal gelesen wird. Eine gute Lösung ist die Verwendung von split
; Einzelheiten finden Sie in der Antwort von Jim Mcnamara.
Da Sie an einem (nicht zurückspulbaren) Stream arbeiten, sollten Sie die '+N'-Form von tail verwenden, um Zeilen ab Zeile N aufwärts zu erhalten.
zcat hugefile.txt.gz | head -n 40000000
zcat hugefile.txt.gz | tail -n +40000001 | head -n 40000000
zcat hugefile.txt.gz | tail -n +80000001 | head -n 40000000