Linux / Befehl csplit: Dateien nach Zeilen oder Mustern aufteilen

csplit teilt eine Datei nicht nach einer festen Größe, sondern an der Zeilennummer oder der Stelle, an der ein passendes Muster erscheint. Es ist nützlich, um Text mit Abschnittsgrenzen zu trennen.

Indem Sie die Teilungspunkte und das Dateinamenspräfix angeben, können Sie Stücke entsprechend der Struktur des Dokuments erstellen. Da die Standardausgabedateinamen wie xx00 generiert werden, verwenden Sie ein spezielles Verzeichnis und Präfix, die nicht mit anderen Arbeitsdateien in Konflikt stehen.

Grundlegende Syntax

csplit [options] input_file pattern...

Installierte Implementierungen und Optionen können je nach Distribution variieren. Überprüfen Sie die Beschreibung auf dem aktuellen System mit man csplit.

Beispiele

Teilen nach Zeilennummer

Die zweite Datei beginnt ab Zeile 11. Die erste Datei enthält die ersten 10 Zeilen.

csplit -f part- notes.txt 11

Teilen nach Muster

Ein neues Stück beginnt an der Zeile, an der das Muster erscheint.

csplit -f section- report.txt '/^Chapter /'

Wiederholtes Aufteilen bei mehreren Übereinstimmungen

GNU {*} wiederholt die Verwendung der Übereinstimmung danach.

csplit -f chapter- book.txt '/^Chapter /' '{*}'

Anzeigen von nach Muster geteilten Dateien

csplit teilt die Eingabe an der Stelle, an der das angegebene Zeilenmuster beginnt. -s unterdrückt die normalerweise für jedes Stück ausgegebene Byte-Anzahl.

printf 'one\nTWO\ntwo\n' > sample.txt
csplit -s -f part- sample.txt '/^TWO$/'
cat part-00
cat part-01

Beispielausgabe beim Ausführen von zwei cat-Befehlen nacheinander:

one
TWO
two

part-00 enthält one vor dem Muster, und part-01 umfasst alles von der Musterzeile bis zum Ende. Wenn das Muster nicht gefunden wird, kann der Befehl fehlschlagen, und vorhandene geteilte Dateien könnten überschrieben werden. Verwenden Sie daher Testdateien und Ausgabeprefixe in einem separaten Arbeitsverzeichnis.

Hauptoptionen und Format

Optionen/Format Beschreibung
-f prefix Legt das Präfix der Ausgabedateinamen der Teile fest.
-n N Legt die Anzahl der Ziffern der numerischen Endung fest.
-s Verbirgt die Bytegrößen-Ausgabe jedes Teils.
-z Erstellt keine leeren Ausgabedateien.
-k Behält bereits erstellte Teile auch dann, wenn ein Fehler auftritt.

Vorsichtsmaßnahmen bei der Verwendung

Wenn kein Muster vorhanden ist oder die Grenze von den Erwartungen abweicht, wird sich die Anzahl und Position der Teile unterscheiden. Überprüfen Sie die Ergebnisse zuerst mit einer Testeingabe und führen Sie es nicht in einem Verzeichnis aus, in dem Ausgabedateien mit vorhandenen Namen existieren. Im Gegensatz zu split hängen die Aufteilungsregeln vom Inhalt der Datei selbst ab.

Häufig gestellte Fragen

Welche sollten Sie verwenden, split oder csplit?

Wenn Sie gleichmäßig nach Größe oder Anzahl der Zeilen aufteilen möchten, verwenden Sie split; wenn Sie an bestimmten Zeilennummern oder Titelmuster aufteilen möchten, ist csplit geeignet.

Offizielle Dokumentation

Sie können das genaue Verhalten der Optionen und die Unterschiede zwischen den Implementierungen in der offiziellen csplit-Dokumentation nachprüfen.