Der Befehl split
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!