Der Befehl split

split-featured

Der Befehl split wird unter Linux / UNIX dazu verwendet, um Dateien beliebig in kleinere Dateien aufzuteilen. Eingesetzt wird der Befehl etwa, wenn die Verarbeitung von Zeilen einer Textdatei in mehrere gleich große "Blöcke" - beispielsweise je 250 Zeilen - aufgeteilt werden soll. Weiterhin kann der Befehl auch bei der Datensicherung oder Verteilung sehr großer Dateien verwendet werden. Wenn gewünscht, lassen sich die Einzeldateien zu einem späteren Zeitpunkt auch wieder zusammenfügen - da es sich nicht um ein proprietäres Format handelt, ist dies zudem auf beliebigen Plattformen möglich.

Im Folgenden wird zunächst die allgemeine Syntax des Befehls vorgestellt. Im Anschluss folgen einige der wichtigsten Optionen mitsamt Beispielanwendungen zu Veranschaulichung der Funktionsweise.

Allgemeine Syntax

Die allgemeine Syntax des Befehls split lautet folgendermaßen:

split [Optionen] [Datei [Präfix]]

Standardmäßig teilt split die übergebene Datei in kleinere Dateien mit der Benennung "[Präfix]aa", "[Präfix]ab", "[Präfix]ac" etc. auf. Die Buchstaben, die den zweistelligen Suffix ausmachen, werden so verwendet, als handele es sich um ein Stellenwertsystem zur Basis 26. So ist es möglich, mit der Standard-Suffix-Länge von zwei Buchstaben bis zu 676 Teildateien zu erhalten. Wird kein Präfix spezifiziert, so ist "x" der Standartwert. Weiterhin ist standardmäßig die Anzahl Zeilen pro Teildatei auf 1000 begrenzt - entsprechend würde eine Datei mit 5000 Zeilen in 5 kleinere Dateien aufgeteilt werden.

Wichtige Optionen

In diesem Abschnitt lernen Sie nun einige der wichtigsten Optionen des Befehls split kennen.

-a - Suffix-Länge

Mit der Option -a können Sie die Länge des Suffix, welcher standardmäßig zweistellig ist, einstellen:

split -a [Länge] [Datei [Präfix]]
Beispiel: Option -a

In diesem Beispiel wird die Länge des Suffix auf "1" festgelegt und anschließend eine Datei "befehl-cat.txt" aufgeteilt.
Eingabe:

split -a 1 befehl-cat.txt

Nach Ausführung:

Der Befehl erzeugt entsprechend der Länge der Eingabedatei Ausgabedateien mit der folgenden Benennung:

xa

xb

...

--additional-suffix - Zusätzlicher Suffix

Die Option --additional-suffix kann verwendet werden, um einen zusätzlichen Suffix, wie beispielsweise eine Dateiendung, hinten an den Zähl-Suffix anzuhängen:

split --additional-suffix [Suffix] [Datei [Präfix]]
Beispiel: Option --additional-suffix

Hier wird ein zusätzlicher Suffix spezifiziert und dann eine Datei "befehl-cat.txt" aufgeteilt.
Eingabe:

split --additional-suffix ".txt" befehl-sudo.txt

Nach Ausführung:

Der Befehl erzeugt entsprechend der Länge der Eingabedatei Ausgabedateien mit der folgenden Benennung:

xaa.txt

xab.txt

...

-b - Bytes pro Ausgabedatei

Mithilfe der Option -b kann die Anzahl Bytes, die pro Ausgabedatei geschrieben wird, festgelegt werden:

split -b [Größe] [Datei [Präfix]]

Die [Größe] stellt dabei einen Integer dar, welcher optional von einem multiplikativen Suffix "b" (Blöcke), "KB" (Kilobytes), "K" (Kibibytes), "MB" (Megabytes), "M" (Mibibytes), "GB" (Gigabytes) "G" (Gibibytes) etc. gefolgt wird.

-C - Bytes Datensätze pro Ausgabedatei

Bei Verwendung der Option -C werden so viele vollständige Datensätze wie möglich in jede Ausgabedatei geschrieben, ohne dabei [Größe] Bytes pro Ausgabedatei zu überschreiten. Einzelne Datensätze, die länger als die angegebene Größe sind, werden in mehrere Dateien aufgeteilt:

split -C [Größe] [Datei [Präfix]]

[Größe] hat dasselbe Format, wie auch bei der Option -b.

--d - numerische Suffixe verwenden

Wird die Option -d angegeben, so werden numerische Ziffern anstelle von Buchstaben zur Nummerierung der Ausgabedateien verwendet:

split -d [Datei [Präfix]]

Optional kann ein Startwert für das Zählen angegeben werden - hierzu wird dann jedoch die Option  --numeric-suffixes benötigt:

split --numeric-suffixes=[Startwert] [Datei [Präfix]]

Der Standard-Startwert ist 0.

Beispiel: Option --numeric-suffixes

In diesem Beispiel sollen numerische Suffixe verwendet werden, wobei die Zählung mit der 1 beginnen soll.
Eingabe:

split --numeric-suffixes=1 befehl-sudo.txt

Nach Ausführung:

Die Ausgabedateien werden wie folgt benannt:

x01

x02

...

-l - Anzahl Datensätze pro Ausgabedatei

Mit der Option -l kann die Anzahl Datensätze spezifiziert werden, die pro Ausgabedatei geschrieben werden sollen:

split -l [Anzahl] [Datei [Präfix]]
Beispiel: Option -l

Die Anzahl Datensätze (Zeilen) pro Ausgabedatei soll in diesem Beispiel auf 250 gesetzt, werden. Im Beispiel wird so etwa eine Datei "benutzer.txt" mit 1000 Benutzernamen in 4 Teildateien aufgeteilt, die dann jeweils 250 Zeilen der Eingabe beinhalten.
Eingabe:

split -l 250 befehl-sudo.txt

Nach Ausführung:

xaa

xab

xac

xad

-t - Trennzeichen für Datensätze

Mithilfe der Option -t können Sie ein Trennzeichen festlegen, welches anstelle des standardmäßigen Zeilenumbruchs (ASCII LF) verwendet werden soll, um Datensätze zu trennen:

split -t [Trennzeichen] [Datei [Präfix]]

Soll das NUL-Zeichen als Trennzeichen verwendet werden, so wird der Option die Zeichenkette "\0" übergeben:

split -t '\0' [Datei [Präfix]]

-n - TEILE Ausgabedateien erstellen

Die Option -n wird verwendet, um die Eingabe in [Teile] Ausgabedateien zu teilen:

split -n [Teile] [Datei [Präfix]]

[Teile] hat hierbei eines der folgenden Formate:

Format

Funktion

N

Erzeuge N Ausgabedateien basierend auf der Größe der derzeitigen Eingabe

K/N

Nur K-te von N in den Standard-Output stdout ausgeben

l/N

Erzeuge N Ausgabedateien ohne Zeilen oder Datensätze zu teilen

l/K/N

Wie "l/N", aber nur K-te von N in den Standard-Output stdout ausgeben

r/N

Wie "r\N" aber Round-Robin-Verfahren verwenden

r/K/N

Wie "r/N", aber nur K-te von N in den Standard-Output stdout ausgeben

Jegliche übrige Bytes nach Teilen der Eingabe in N Teile werden dem letzten Teil angefügt. Weiterhin werden übrige Bytes, die nach der initialen Berechnung auftauchen, ignoriert - außer es wird der "r"-Modus verwendet.

Alle N Ausgabedateien werden erzeugt, auch wenn weniger als N Zeilen vorhanden sind, oder die Eingabe abgeschnitten wird.

Bei dem "l"-Modus haben die Teile ungefähr die Größe der Eingabe dividiert durch N. Die Eingabe wird in N gleich große Teile partitioniert, wobei der letzten Partition jeglicher Überschuss zugewiesen wird. Wenn eine Zeile innerhalb einer Partition anfängt, wird sie vollständig in die entsprechende Datei geschrieben. Da Zeilen oder Datensätze nicht aufgeteilt werden, auch wenn sie eine Partition überlappen, können die geschriebenen Dateien größer oder kleiner als die Partitionsgröße sein, und sogar leer, wenn eine Zeile / ein Datensatz so lang ist, dass er die Partition vollständig überlappt.

Für den "r"-Modus ist die Größe der Eingabe irrelevant, sodass es sich auch um etwa eine Pipe handeln kann.

--verbose - Meldung pro Ausgabedatei

Erzeugt eine Meldung vor dem Öffnen jeder Ausgabedatei:

split --verbose [Datei [Präfix]]

Abonniere JETZT unseren Newsletter!


Verpasse nie wieder neue Beiträge und exklusive Insider-Only-Inhalte!

Joel Benseler

Click Here to Leave a Comment Below

Leave a Comment: