GNU/Linux >> LINUX-Kenntnisse >  >> Linux

unix - teilt eine riesige .gz-Datei zeilenweise auf

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

Linux
  1. Wie man Zeilen in einer Datei in UNIX/Linux zählt

  2. Schneller Unix-Befehl zum Anzeigen bestimmter Zeilen in der Mitte einer Datei?

  3. Wie teilt man eine Datei und behält die erste Zeile in jedem der Teile bei?

  4. Unix - Kopf UND Ende der Datei

  5. So erhalten Sie die ersten n Zeichen jeder Zeile in einer Unix-Datendatei

So teilen Sie eine große Datei in Teile bei bestimmten Zeilennummern auf

So konvertieren Sie eine Windows-Datei in eine UNIX-Datei

AWK-Befehl unter Linux/Unix

Unix Sed Tutorial:Drucken von Dateizeilen mit Adresse und Mustern

Unix Sed Tutorial:Dateizeilen anhängen, einfügen, ersetzen und zählen

Unix Sed Tutorial:Mehrzeilige Dateioperation mit 6 praktischen Beispielen