710 Stimmen

Wie kann ich eine große Textdatei in kleinere Dateien mit der gleichen Anzahl von Zeilen aufteilen?

Ich habe eine große (nach Anzahl der Zeilen) reine Textdatei, die ich in kleinere Dateien aufteilen möchte, ebenfalls nach Anzahl der Zeilen. Wenn meine Datei also etwa 2 Mio. Zeilen hat, möchte ich sie in 10 Dateien mit 200k Zeilen oder 100 Dateien mit 20k Zeilen aufteilen (plus eine Datei mit dem Rest; dass sie gleichmäßig teilbar ist, spielt keine Rolle).

Ich könnte dies ziemlich leicht in Python tun, aber ich frage mich, ob es irgendeine Art von Ninja Weg, dies zu tun mit Bash und Unix-Dienstprogramme (im Gegensatz zu manuell Schleife und Zählen / Partitionierung Zeilen).

3 Stimmen

Nur aus Neugier: Wie kann man sie nach dem "Aufteilen" "kombinieren"? Etwas wie "cat part2 >> part1"? Oder gibt es ein anderes Ninja-Dienstprogramm? Könnten Sie Ihre Frage aktualisieren?

14 Stimmen

Um es wieder zusammenzusetzen, cat part* > original

12 Stimmen

Ja, cat ist die Abkürzung für concatenate. Im Allgemeinen ist apropos nützlich, um geeignete Befehle zu finden. Siehe z.B. die Ausgabe von: apropos split

1116voto

Mark Byers Punkte 761508

Schauen Sie sich den Befehl split an:

$ split --help
Usage: split [OPTION] [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -l, --lines=NUMBER      put NUMBER lines per output file
      --verbose           print a diagnostic to standard error just
                            before each output file is opened
      --help     display this help and exit
      --version  output version information and exit

Sie könnten etwa so vorgehen:

split -l 200000 filename

die Dateien mit jeweils 200000 Zeilen namens xaa xab xac ...

Eine weitere Option ist die Aufteilung nach Größe der Ausgabedatei (die Aufteilung erfolgt weiterhin bei Zeilenumbrüchen):

 split -C 20m --numeric-suffixes input_filename output_prefix

erstellt Dateien wie output_prefix01 output_prefix02 output_prefix03 ... mit einer maximalen Größe von jeweils 20 Megabyte.

110voto

Robert Christie Punkte 19309

Verwenden Sie die geteilt Befehl:

split -l 200000 mybigfile.txt

50voto

Dave Kirby Punkte 24272

Ja, es gibt eine split Befehl. Er teilt eine Datei nach Zeilen oder Bytes auf.

$ split --help
Usage: split [OPTION]... [INPUT [PREFIX]]
Output fixed-size pieces of INPUT to PREFIXaa, PREFIXab, ...; default
size is 1000 lines, and default PREFIX is `x'.  With no INPUT, or when INPUT
is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -a, --suffix-length=N   use suffixes of length N (default 2)
  -b, --bytes=SIZE        put SIZE bytes per output file
  -C, --line-bytes=SIZE   put at most SIZE bytes of lines per output file
  -d, --numeric-suffixes  use numeric suffixes instead of alphabetic
  -l, --lines=NUMBER      put NUMBER lines per output file
      --verbose           print a diagnostic just before each
                            output file is opened
      --help     display this help and exit
      --version  output version information and exit

SIZE may have a multiplier suffix:
b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024,
GB 1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

30voto

BuGaU0 Punkte 101

Aufteilung einer großen Textdatei in kleinere Dateien mit jeweils 1000 Zeilen:

split <file> -l 1000

Aufteilung einer großen Binärdatei in kleinere Dateien von je 10M:

split <file> -b 10M

Konsolidierung geteilter Dateien in eine einzige Datei:

cat x* > <file>

Eine Datei aufteilen, wobei jeder Split 10 Zeilen umfasst (außer dem letzten Split):

split -l 10 filename

Eine Datei in 5 Dateien aufteilen. Die Datei wird so aufgeteilt, dass jede Aufteilung die gleiche Größe hat (außer der letzten Aufteilung):

split -n 5 filename

Teilen Sie eine Datei mit 512 Bytes in jedem Split (außer dem letzten Split; verwenden Sie 512k für Kilobytes und 512m für Megabytes):

split -b 512 filename

Teilen Sie eine Datei mit maximal 512 Bytes in jedem Split ohne Zeilenumbruch:

split -C 512 filename

--> von : cht.sh

20voto

ialqwaiz Punkte 179

Teilen Sie die Datei "file.txt" in Dateien mit 10.000 Zeilen auf:

split -l 10000 file.txt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X