Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

csplit - Datei nach bestimmten Kriterien unterteilen

&pagelevel(4)&pagelevel

(split files based on context)


csplit teilt den Inhalt einer Datei oder den Eingabetext, den csplit von der Standard-Eingabe liest, in kleinere Abschnitte auf. Die Abschnitte, oder nur einige dieser Abschnitte, schreibt csplit in je eine Ausgabedatei. Die ursprüngliche Datei bleibt erhalten.

Mit Hilfe von Argumenten geben Sie an, wie csplit die Datei aufteilen und für welche Abschnitte csplit Ausgabedateien erstellen soll.

Ohne Angabe von -n erstellt csplit höchstens 100 Ausgabedateien.


Syntax


csplit[ -ks][ -f name][ -n zahl] datei arg1 ... argn

Keine Option angegeben:

Die Ausgabedateien heißen xx00, xx01 usw.

Auf die Standard-Ausgabe gibt csplit für jede erstellte Ausgabedatei die Anzahl der Zeichen aus, die in dieser Datei stehen.

Tritt ein Fehler auf, so entfernt csplit alle bereits erstellten Dateien.

-f name

Die Ausgabedateien heißen name00, name01 usw.

-f nicht angegeben: Die Ausgabedateien heißen xx00, xx01 usw.

-k

Tritt ein Fehler auf, so bleiben die bereits erstellten Dateien erhalten.

-n zahl

Die laufende Nummer der Ausgabedateien besteht aus zahl Ziffern, wobei 1 <= zahl <= 9.

Beispiel

Bei -n 4 heißen die Ausgabedateien xx0000, xx0001 usw.

-n nicht angegeben:
Die laufende Nummer besteht aus 2 Ziffern.

-s

Die Ausgabe der Zeichenanzahl wird unterdrückt.

datei

Name der Eingabedatei.
Wenn Sie für datei einen Bindestrich - eingeben, liest csplit von der Standard-Eingabe.

arg1 ... argn

Sie können mehrere Argumente angeben. Jedes Argument verweist auf eine Zeile der Eingabedatei. Diese Zeilen bilden die Trennlinien zwischen den Abschnitten, in die csplit die Datei aufteilt: Jede solche Zeile ist die erste Zeile eines Abschnitts.
Geben Sie n Argumente an, dann teilt csplit die Eingabedatei in n+1 Abschnitte auf.

Normalerweise schreibt csplit jeden Abschnitt in eine Ausgabedatei.

Ausnahme: siehe das Argument %regulärer_ausdruck%[+zahl][-zahl]. Der letzte Abschnitt (Abschnitt n) wird auf jeden Fall in eine Ausgabedatei geschrieben.

csplit arbeitet die Argumente der Reihe nach ab. Zu Beginn ist die erste Zeile der Eingabedatei die aktuelle Zeile. Ist ein Argument abgearbeitet, so wird die Zeile, auf die dieses Argument verweist, zur aktuellen Zeile. Die Zeile, auf die das darauffolgende Argument verweist, muss sich in dem Bereich zwischen der aktuellen Zeile (ausschließlich) und dem Ende der Eingabedatei befinden. Z.B. muss die Zeile, auf die das zweite Argument verweist, in der Eingabedatei nach der Zeile stehen, auf die das erste Argument verweist.

argument kann sein:

/regulärer_ausdruck/[+zahl][-zahl]

Ein Argument der Form /regulärer_ausdruck/ verweist, ausgehend von der aktuellen Zeile, auf die nächste Zeile, die zu dem regulären Ausdruck passt. csplit schreibt den Abschnitt von der aktuellen Zeile bis (ausschließlich) zu der Zeile, die zu dem regulären Ausdruck passt, in eine Ausgabedatei. Dann wird die zum regulären Ausdruck passende Zeile zur aktuellen Zeile.

Zusammen mit +zahl oder -zahl verschiebt sich die Abschnittsgrenze um zahl Zeilen hinter (+) oder vor (-) die Zeile, die zu dem regulären Ausdruck passt. Entsprechend wird die Zeile, die zahl Zeilen hinter (+) bzw. vor (-) der zum regulären Ausdruck passenden Zeile steht, zur aktuellen Zeile.

Zulässig sind einfache reguläre Ausdrücke (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Enthält das Argument Leerzeichen oder Sonderzeichen der Shell (siehe Tabellen und Verzeichnisse, Sonderzeichen der POSIX-Shell), dann müssen Sie diese Zeichen mit einem Gegenschrägstrich \ entwerten oder das Argument in Hochkommata ’...’ einschließen. Der reguläre Ausdruck darf keine Neue-Zeile-Zeichen enthalten.

%regulärer_ausdruck%[+zahl][-zahl]

Ein Argument der Form %regulärer_ausdruck% verweist, ausgehend von der aktuellen Zeile, auf die nächste Zeile, die zu dem regulären Ausdruck passt. Die zum regulären Ausdruck passende Zeile wird zur aktuellen Zeile. csplit erstellt für den betreffenden Abschnitt keine Ausgabedatei.

Zusammen mit +zahl oder -zahl wird die Zeile, die zahl Zeilen hinter (+) bzw. vor (-) der zum regulären Ausdruck passenden Zeile steht, zur aktuellen Zeile.

Zulässig sind einfache reguläre Ausdrücke (siehe Tabellen und Verzeichnisse, Reguläre Ausdrücke). Enthält das Argument Leerzeichen oder Sonderzeichen der Shell (siehe Tabellen und Verzeichnisse, Sonderzeichen der POSIX-Shell), dann müssen Sie diese Zeichen mit einem Gegenschrägstrich \ entwerten oder das Argument in Hochkommata '...' einschließen. Der reguläre Ausdruck darf keine Neue-Zeile-Zeichen enthalten. 

nr

Dieses Argument verweist auf die Zeile mit der Nummer nr. csplit schreibt den Abschnitt von der aktuellen Zeile bis (ausschließlich) zur nr-ten Zeile in eine Ausgabedatei. Dann wird die nr-te Zeile zur aktuellen Zeile.

{n}

Dieses Argument steht abkürzend für n Argumente der oben beschriebenen Formen und bedeutet: "Vorhergehendes Argument n weitere Male verwenden". n ist eine ganze Zahl größer gleich 1.

Das Argument {n} kann, getrennt durch Leerzeichen, auf jedes der obengenannten Argumente folgen.Folgt es auf ein Argument der Form /regulärer_ausdruck/[+zahl][-zahl] oder %regulärer_ausdruck%[+zahl][-zahl], so wird dieses Argument n weitere Male verwendet.

Beispiel

'/reg_ausdruck/' {2} ist eine Abkürzung für '/reg_ausdruck/' '/reg_ausdruck/' '/reg_ausdruck/'

Folgt {n} auf ein Argument der Form nr, so wird die Datei ab der nr-ten Zeile n-mal alle nr Zeilen unterteilt.

Beispiel

100 {2} ist eine Abkürzung für 100 200 300

Fehler

argument - out of range

Die Zeile, auf die das Argument argument verweist, befindet sich außerhalb des zulässigen Bereichs. Der zulässige Bereich erstreckt sich von der aktuellen Zeile (ausschließlich) bis zum Dateiende.


100 file limit reached at arg ...

Sie haben so viele Argumente angeben, dass csplit mehr als 100 Ausgabedateien anlegen müsste.

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos csplit:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

Ist diese Variable auf einen Wert gesetzt, d. h. ist sie nicht leer, überschreibt dieser Wert die Werte aller übrigen Internationalisierungsvariablen.

LC_COLLATE

Legt die internationale Umgebung für das Verhalten von Bereichen, Äquivalenzklassen und Zeicheneinheiten in regulären Ausdrücken fest.

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) und das Verhalten von Zeichenklassen in regulären Ausdrücken.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Beispiel 1

Die Datei buch enthält einen Text, der in drei Kapitel gegliedert ist. Vor dem ersten Kapitel steht ein Vorwort, nach dem letzten ein Anhang. Jedes Kapitel beginnt mit der Überschrift „KAPITEL ...“; der Anhang hat die Überschrift „ANHANG“.
Sie wollen nun das Vorwort, die einzelnen Kapitel und den Anhang jeweils in eine eigene Datei schreiben. Die Ausgabedateien sollen kap.. heißen.

$ csplit -f kap buch '/KAPITEL/' '/KAPITEL/' '/KAPITEL/' '/ANHANG/'
1636
15124
32743
20344
2576
$ ls
buch         kap00         kap01        kap02        kap03
kap04

Die Datei kap00 enthält das Vorwort; sie besteht aus 1636 Zeichen. Der Anhang steht in der Datei kap04.
Der folgende, kürzere csplit-Aufruf hat die gleiche Wirkung:

$ csplit -f kap buch '/KAPITEL/' {2} '/ANHANG/'
:

Nun können Sie die Abschnitte getrennt editieren. Danach setzen Sie sie mit cat wieder zusammen:
$ cat kap0[0-4] > buch

Beispiel 2

Eine Eingabedatei datei soll bei jeder hundertsten Zeile unterteilt werden. Dazu geben Sie ein:

$ csplit datei 100 {98}

Das Argument {98} steht für 98 Argumente: 200 300 ... 9900.

Enthält datei 9900 oder mehr Zeilen, dann erstellt csplit 100 Ausgabedateien. Die erste Ausgabedatei xx00 enthält Zeile 1 bis 99 (einschließlich), die letzte Ausgabedatei xx99 enthält den Rest von datei ab Zeile 9900.
Enthält datei weniger als 9900 Zeilen, dann gibt csplit die Fehlermeldung "{98} - out of range" aus und bricht ab. Geben Sie beim Aufruf die Option -k an, dann bleiben die bereits erstellten Dateien erhalten:

$ csplit -k datei 100 {98}
Enthält datei z.B. nur 9830 Zeilen, dann ist xx98 die zuletzt erstellte Ausgabedatei und enthält die Zeilen 9800 bis 9830.

Beispiel 3

Die Datei prog.c enthält ein C-Quellprogramm. Das Programm enthält die Funktion main sowie höchstens 20 weitere Funktionen. Jede Funktion endet gemäß den C-Konventionen mit einer schließenden geschweiften Klammer am Anfang der Zeile (1.Spalte). Innerhalb einer Funktion stehen schließende geschweifte Klammern nicht in der 1.Spalte einer Zeile. Jede Funktion soll in eine eigene Datei geschrieben werden.

Dazu geben Sie ein:

$ csplit -k prog.c '%main(%' '/^}/+1' {19}

Enthält das Programm außer der Funktion main genau 20 weitere Funktionen, dann teilt csplit die Datei in 22 Abschnitte auf.

Abschnitt 0 enthält alle Zeilen vom Beginn der Datei bis ausschließlich zum Beginn der Funktion main. Dieser Abschnitt wird in keine Ausgabedatei geschrieben (Argument %main(%).

Abschnitt 1 enthält die Funktion main und wird in die Ausgabedatei xx00 geschrieben (Argument /^}/+1).

Entsprechend werden sukzessive die Funktionen 1 bis 19 in Ausgabedateien geschrieben (Argument {19}). Zum Schluss wird Abschnitt 22, der den Rest der Eingabedatei enthält (das ist gerade die 20. Funktion), in die Ausgabedatei xx20 geschrieben.

Enthält das Programm weniger Funktionen, so bricht csplit bei der letzten Funktion mit der Fehlermeldung "{19} - out of range" ab. Da jedoch Option -k gesetzt ist, bleiben die erstellten Ausgabedateien erhalten.

Siehe auch

ed, sh, split