Linux split-Befehl

Linux 命令大全Linux-Befehlsreferenz

splitsplit ist ein in Linux integriertes Werkzeug zum Aufteilen von Dateien, das eine Datei nach Zeilenzahl, Größe oder einer angegebenen Anzahl aufteilen kann.

splitDer Befehl wird verwendet, um eine große Datei in mehrere kleinere Dateien aufzuteilen, was die Übertragung, Speicherung oder parallele Verarbeitung erleichtert.

Die aufgeteilten Dateien können mit demcatBefehl wieder in die Originaldatei zusammengefügt werden.

Wenn Protokolldateien zu groß sind, um sie mit einem Editor zu öffnen, wenn eine große Datei in Teilen hochgeladen werden muss oder wenn Daten parallel verarbeitet werden müssen,splitist split die bevorzugte Lösung.

Split-Dateien werden standardmäßig benannt mitxaa、xab、xacund andere alphabetische Sequenzen.

splitsplit löscht die Originaldatei nicht und verändert sie nicht, daher ist der Split-Vorgang sicher. Wenn Sie jedoch in viele kleine Dateien aufteilen, stellen Sie sicher, dass ausreichend Speicherplatz auf der Festplatte vorhanden ist.

Befehlssyntax

splitDie grundlegende Syntax von split lautet wie folgt:

split [选项] [输入文件] [输出文件前缀]

Wenn keine Eingabedatei angegeben ist, werden die Daten von der Standardeingabe gelesen.

Wenn kein Ausgabedatei-Präfix angegeben ist, wird standardmäßig das Präfixxverwendet.

splitDie gängigen Optionen von split sind unten aufgeführt:

OptionBeschreibungBeispiel
-b, --bytes=大小Die Datei nach der angegebenen Anzahl von Bytes aufteilensplit -b 100M large.log
-l, --lines=行数Die Datei nach der angegebenen Anzahl von Zeilen aufteilensplit -l 1000 data.txt
-n, --number=数量In die angegebene Anzahl kleiner Dateien aufteilensplit -n 5 data.txt
-a, --suffix-length=NSuffixlänge angeben (Standard ist 2)split -a 3 -l 100 data.txt
-d, --numeric-suffixesVerwende numerische Suffixe anstelle von alphabetischen Suffixensplit -d -l 100 data.txt
-C, --line-bytes=大小Nach Größe aufteilen, wobei jede Zeile vollständig bleibtsplit -C 10M log.txt
--verboseDetaillierte Informationen über den Aufteilungsprozess anzeigensplit --verbose -b 10M file.bin

Unterstützte Größeinheiten umfassen:K(KB),M(MB),G(GB),T(TB) und andere Suffixe.

Unterschied zwischen -b und -C:

OptionVerhaltenAnwendungsszenario
-bSchneidet strikt nach Byteanzahl und kann mitten in einer Zeile abschneidenBinärdateien oder Szenarien, in denen Zeilenumbrüche keine Rolle spielen
-CVersucht beim Erreichen des Größenlimits an Zeilengrenzen zu schneiden, sodass jede Zeile vollständig bleibtText-Logs, CSV und andere Szenarien, in denen Zeilen intakt bleiben müssen

Beim Aufteilen von Textdateien bevorzugen Sie-Cover-bum zu vermeiden, dass eine Zeile abgeschnitten und auf zwei Dateien aufgeteilt wird.


Detaillierte Verwendung

Nach Zeilenanzahl aufteilen

Das Aufteilen nach Zeilenanzahl ist die intuitivste Methode und eignet sich für die Verarbeitung von Protokolldateien oder CSV-Daten.

# 生成一个包含 5000 行的测试文件
$ seq 1 5000 > data.txt

# 每 1000 行拆分为一个小文件
$ split -l 1000 data.txt part_

# 查看生成的文件
$ ls -lh part_*
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_aa
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ab
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ac
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ad
-rw-r--r-- 1 example example 3.9K May 19 14:30 part_ae

Nach der Ausführung werden 5 Dateien erzeugt, jede mit genau 1000 Zeilen, und die Dateinamen verwendenpart_als Präfix.

Nach Dateigröße aufteilen

Das Aufteilen nach Größe eignet sich zum Zerteilen von Binärdateien oder zum Begrenzen der maximalen Größe einer einzelnen Datei.

# 生成一个 10MB 的测试文件
$ dd if=/dev/urandom of=test.bin bs=1M count=10

# 按每 2MB 拆分
$ split -b 2M test.bin chunk_

# 查看拆分结果
$ ls -lh chunk_*
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_aa
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ab
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ac
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ad
-rw-r--r-- 1 example example 2.0M May 19 14:32 chunk_ae

Anzahl der Aufteilungen angeben

Verwenden Sie-num die Datei gleichmäßig in die angegebene Anzahl kleiner Dateien aufzuteilen.

# 将文件均分为 3 份
$ split -n 3 data.txt equal_

# 查看各文件行数
$ wc -l equal_*
  1667 equal_aa
  1667 equal_ab
  1666 equal_ac
  5000 total

Die Datei wird so gleichmäßig wie möglich aufgeteilt; eine Datei mit insgesamt 5000 Zeilen wird auf etwa 1667 Zeilen pro Datei aufgeteilt.

Wenn die Gesamtzahl der Zeilen nicht gleichmäßig teilbar ist, erhalten die früheren Dateien ein paar zusätzliche Zeilen und die späteren Dateien ein paar weniger.

Numerische Suffixe verwenden

Das standardmäßige alphabetische Suffix (aa、ab...) ist nicht intuitiv genug; Sie können-dverwenden, um zu numerischen Suffixen zu wechseln.

# 使用数字后缀,并指定后缀长度为 3
$ split -d -a 3 -l 1000 data.txt example_

# 生成的文件名
$ ls example_*
example_000  example_001  example_002  example_003  example_004

Hier bedeutet eine Suffixlänge von 3, dass bis zu 1000 Dateien unterstützt werden (von 000 bis 999). Wenn Sie in viele kleine Dateien aufteilen, können Sie den Wert von-adie Option.

Text aufteilen und dabei die Zeilenintegrität wahren

Verwenden Sie-Cum nach Größe aufzuteilen und dabei sicherzustellen, dass keine Zeile abgeschnitten wird.

# 生成一个包含不同长度行的测试日志
$ for i in $(seq 1 100); do echo "Line $i: EXAMPLE testing data $(head -c $((RANDOM % 50 + 10)) /dev/urandom | base64)"; done > log.txt

# 按 1KB 拆分,同时保持行完整性
$ split -C 1K log.txt log_

# 检查每个文件的最后一行是否完整(都以换行符结尾)
$ for f in log_*; do echo "$f: $(tail -c 1 $f | xxd | grep -c '0a')"; done

-CDadurch wird sichergestellt, dass die letzte Zeile jeder geteilten Datei vollständig ist und Zeilen niemals in der Mitte durchtrennt werden.

Geteilte Dateien zusammenführen

Die geteilten Dateien können verlustfrei zusammengeführt werden, um die Originaldatei wiederherzustellen:

# 合并所有拆分文件,还原为原始文件
$ cat part_* > restored.txt

# 验证合并后的内容与原始文件一致
$ diff data.txt restored.txt && echo "文件一致,合并成功"
文件一致,合并成功

Beim Zusammenführen,catcat verkettet sie in der alphabetischen Reihenfolge der Shell-Wildcard-Erweiterung, was genau diesplitReihenfolge, in der split die Dateien erzeugt.


FAQ

Die aufgeteilten Dateien belegen weiterhin denselben Gesamtspeicherplatz auf der Festplatte wie die Originaldatei (tatsächlich gibt es einen gewissen zusätzlichen Overhead für Dateisystem-Metadaten), stellen Sie also sicher, dass genügend freier Speicherplatz auf der Festplatte verfügbar ist.

Wenn numerische Suffixe verwendet werden und die Anzahl der Split-Dateien die durch die Suffixlänge maximal darstellbare Anzahl überschreitet (z. B.-a 2bis zu 100 Dateien),splitsplit wird mit einem Fehler beendet. Erhöhen Sie den Wert des-aParameters, um das Problem zu beheben.

Wenn Sie nach bestimmten Inhalten aufteilen möchten (z. B. nach einem Trennzeichen),splitunterstützt split dies nicht; verwenden Sie stattdessen dencsplitBefehl csplit.

Beim Lesen von Daten aus der Standardeingabesplitkann split die Gesamtgröße nicht schätzen, daher unterstützt die-nOption zum Angeben der Anzahl der Aufteilungen den Standardeingabemodus nicht.


Verwandte Befehle

BefehlBeschreibung
catDateien zusammenführen oder Dateiinhalte ausgeben
csplitDateien nach Inhalt aufteilen (regulärer Ausdruck)
wcDie Zeilen, Wörter und Bytes in einer Datei zählen
ddDateien konvertieren und kopieren sowie Daten nach Blockgröße extrahieren
headDen Anfang einer Datei ausgeben
tailDas Ende einer Datei ausgeben

Linux 命令大全Linux-Befehlsreferenz

Weitere Erweiterungen