命令主要作用
将一个大文件分割成多个小文件。它可以根据文件大小或行数将大文件拆分成多个小文件,方便进行文件传输、备份或处理。它可以按照指定的大小或者行数,将原始文件切割为多个部分,并自动命名输出的文件。
基本语法
split [OPTION]... [FILE [PREFIX]]
其中:OPTION用于指定分割方式(按大小或行数);FILE是需要被分割的大文件,如果没有FILE,或者当FILE为-时,读取标准输入;PREFIX是分割后生成的小文件的前缀名。
默认大小为1000行,默认PREFIX为“x”,因此将FILE分割后输出到xaa、xab、…
常用选项
-a, --suffix-length=N:指定输出文件后缀名的长度。默认为2。
--additional-suffix=SUFFIX:将额外的SUFFIX附加到文件名中。
-b, --bytes=SIZE:指定每个输出文件的大小,单位为字节。例如,-b 1M表示每个输出文件大小为1MB。
-l, --lines=NUMBER:指定每个输出文件的行数。例如,-l 1000表示每个输出文件包含1000行。
-d:使用从0开始的数字后缀,而不是字母后缀。
--numeric-suffixes[=FROM]:与-d相同,但允许设置起始值。
-x:使用从0开始的十六进制后缀,而不是字母后缀。
--hex-suffixes[=FROM]:与-x相同,但允许设置起始值。
-d, --numeric-suffixes:使用数字作为后缀名,而不是默认的字母。这样可以更直观地看出文件的顺序。
-n, --number=CHUNKS:分割为指定数量的输出文件。
CHUNKS可以是以下指定形式:
N:根据大小将输入数据分割为N个文件。
K/N:输出第K个文件(共N个,K从1开始)到标准输出。
l/N:分割为N个文件,不拆分行/记录(l为字母L的小写)。
l/K/N:输出第K个文件到标准输出,不拆分行/记录。
r/N:类似于“l/N”,但使用轮询分布。
r/K/N:类似于 r/N,但是只将第K个文件输出到标准输出。
使用示例
1. 按文件大小分割
假设我们有一个名为sample.dat的大文件,想要将其分割成每个大小为20MB的小文件,可以使用以下命令:
split -b 20M sample.dat sample_
执行后,会生成多个以sample_为前缀的小文件,如sample_aa、sample_ab等,每个文件大小为20MB。
2. 按行数分割并使用数字后缀名
如果我们想要按照行数来分割文件,比如将list.txt分割为每个小文件包含1000行,可以使用以下命令:
split -l 1000 --numeric-suffixes=1 list.txt list_
执行后,会生成多个以list_为前缀、数字为后缀的小文件,如list_01、list_02等,每个文件包含1000行数据。
如果想保留文件名的.txt后缀,可以添加--additional-suffix选项。
3. 分割为指定数量的输出文件
如果需要按照输出文件数量分割文件,可以使用CHUNKS参数来指定文件的分割方式。比如将list.txt使用循环分布的方式分隔成3个文件。我们使用seq生成一个数字序列来进行演示:
seq 12 >list.txt
生成的list.txt文件有12行,每行分别对应从1到12的数字。
使用循环分布分割为3个文件,不拆分行/记录:
split -n r/3 list.txt
执行后,会生成3个文件:xaa、xab、xac。
将轮询分布后的第2个文件输出到标准输出,其内容与之前生成的xab文件内容一致:
~$ split -n r/2/3 list.txt
2
5
8
11