csplit(1) csplit(1)
NAME
csplit - Datei nach bestimmten Kriterien unterteilen (context split)
SYNTAX
csplit [option ...] datei argument ...
BESCHREIBUNG
csplit teilt den Inhalt einer Datei oder den Eingabetext, den csplit
von der Standardeingabe 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 pro Aufruf höchstens 100 Ausgabeda-
teien.
OPTIONEN
Keine Option angegeben:
Die Ausgabedateien heißen xx00, xx01 usw.
Auf die Standardausgabe gibt csplit für jede erstellte Ausgabeda-
tei 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.
-- Ende der Optionenliste. Die Angabe ist nötig, wenn datei mit -
beginnt.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
csplit(1) csplit(1)
datei
Name der Eingabedatei.
Wenn Sie für datei einen Bindestrich - eingeben, liest csplit von
der Standardeingabe.
argument
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. Die Abschnitte enthalten also jeweils folgende
Zeilen:
________________________________________________________________
| Abschnitt| Inhalt |
|__________|____________________________________________________|
| 0 | Alle Zeilen vom Beginn der Eingabedatei bis (aus- |
| | schließlich) zu der Zeile, auf die das 1. Argument|
| | verweist. |
|__________|____________________________________________________|
| 1 | Alle Zeilen von der Zeile, auf die das 1. Argument|
| | verweist, bis (ausschließlich) zu der Zeile, auf |
| | die das 2. Argument verweist. |
|__________|____________________________________________________|
| ... | ... |
|__________|____________________________________________________|
| n | Alle Zeilen von der Zeile, auf die das n-te Argu- |
| | ment verweist, bis zum Ende der Eingabedatei. |
|__________|____________________________________________________|
Normalerweise schreibt csplit jeden Abschnitt in eine Ausgabeda-
tei.
Ausnahme: siehe das Argument %regulärerausdruck%[+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 darauffol-
gende Argument verweist, muß sich in dem Bereich zwischen der
aktuellen Zeile (ausschließlich) und dem Ende der Eingabedatei
befinden. Z. B. muß die Zeile, auf die das zweite Argument ver-
weist, in der Eingabedatei nach der Zeile stehen, auf die das
erste Argument verweist.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
csplit(1) csplit(1)
argument kann sein:
/regulärerausdruck/[+zahl][-zahl]
Ein Argument der Form /regulärerausdruck/ verweist, ausge-
hend von der aktuellen Zeile, auf die nächste Zeile, die zu
dem regulären Ausdruck paßt. csplit schreibt den Abschnitt
von der aktuellen Zeile bis (ausschließlich) zu der Zeile,
die zu dem regulären Ausdruck paßt, 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 paßt. 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
expressions(5)]. Enthält das Argument Leerzeichen oder Son-
derzeichen der Shell [siehe specialchar(5)], 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ärerausdruck%[+zahl][-zahl]
Ein Argument der Form %regulärerausdruck% verweist, ausge-
hend von der aktuellen Zeile, auf die nächste Zeile, die zu
dem regulären Ausdruck paßt. Die zum regulären Ausdruck pas-
sende Zeile wird zur aktuellen Zeile. csplit erstellt für
den betreffenden Abschnitt keine Ausgabedatei.
Zusammen mit +zahl oder -zahl wird die Zeile, die zahl Zei-
len hinter (+) bzw. vor (-) der zum regulären Ausdruck pas-
senden Zeile steht, zur aktuellen Zeile.
Zulässig sind einfache reguläre Ausdrücke [siehe
expressions(5)]. Enthält das Argument Leerzeichen oder Son-
derzeichen der Shell [siehe specialchar(5)], 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.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
csplit(1) csplit(1)
Das Argument {n} kann, getrennt durch Leerzeichen, auf jedes
der obengenannten Argumente folgen.
Folgt es auf ein Argument der Form
/regulärerausdruck/[+zahl][-zahl] oder
%regulärerausdruck%[+zahl][-zahl], so wird dieses Argument
n weitere Male verwendet.
Beispiel:
'/regausdruck/' {2}
ist eine Abkürzung für
'/regausdruck/' '/regausdruck/' '/regausdruck/'
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
FEHLERMELDUNGEN
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.
'xx' file limit reached ...
Sie haben so viele Argumente angeben, daß csplit mehr Ausgabedateien
anlegen müßte, als der bei der Option -n angegebene Wert erlaubt.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte. LCCTYPE bestimmt die Zeichenklassen und die Zeichenkonvertie-
rung.
Wenn LCMESSAGES oder LCCTYPE nicht oder als leere Zeichenkette defi-
niert ist, wird der Wert von LANG als Standardwert für die jeweils
nicht gesetzte oder leere Variable herangezogen. Ist auch LANG nicht
oder als leere Zeichenkette definiert, verhält sich das System so, als
wäre es nicht internationalisiert.
Hat eine der Variablen für die internationale Umgebung einen ungülti-
gen Wert, verhält sich das System so, als wäre keine Variable gesetzt.
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
csplit(1) csplit(1)
Die Umgebungsvariable LCALL bestimmt die gesamte internationale Umge-
bung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen im
Bereich der Internationalisierung.
BEISPIELE
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
kap00, kap01 usw. 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}
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
csplit(1) csplit(1)
Das Argument {98} steht für 98 Argumente: 200 300 ... 9900.
Enthält datei 9900 oder mehr Zeilen, dann erstellt csplit 100 Ausgabe-
dateien. Die erste Ausgabedatei xx00 enthält Zeile 1 bis 99 (ein-
schließ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 ste-
hen 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 Funktio-
nen, 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
Schluß 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(1), sed(1), sh(1), split(1).
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98