Split:将文件分割成片段
split命令将输入(如果未指定输入或输入为“-”,则使用标准输入)分割成连续或交错的部分,并创建包含这些部分的输出文件。使用方法如下:
split [option] [input [prefix]]
默认情况下,split将1000行输入(或者对于最后一个部分剩余的内容)放入每个输出文件中。
退出状态为零表示成功,非零值表示失败。
输出文件的名称由前缀(默认为“x”)后跟一组字符(默认为“aa”,“ab”,等等)组成,以便按照文件名的传统排序顺序连接输出文件可以生成原始输入文件(除了 -nr/n 选项)。默认情况下,split将最初创建具有两个生成的后缀字符的文件,并在下一个最重要的位置达到最后一个字符时,将该宽度增加两个字符('yz','zaaa','zaab',等等)。通过这种方式,支持任意数量的输出文件,并且可以按照上述描述的方式进行排序,即使在存在--additional-suffix选项的情况下也是如此。如果指定了-a选项并且输出文件名用尽,split将报告错误,而不删除已创建的输出文件。
该程序接受以下选项。还请参阅公共选项。
'-l 行数'
'--lines=行数'
将行数行输入放入每个输出文件中。如果指定了--separator选项,则行数确定记录的数量。
为了兼容性,split还支持过时的选项语法-l行数。新的脚本应该使用-l行数代替。
'-b 大小'
'--bytes=大小'
将大小个字节的输入放入每个输出文件中。大小可以是以下乘法后缀之一的整数(可选)后跟随一个整数:
'b' => 512 ("blocks") 'KB' => 1000 (KiloBytes) 'K' => 1024 (KibiBytes) 'MB' => 1000*1000 (MegaBytes) 'M' => 1024*1024 (MebiBytes) 'GB' => 1000*1000*1000 (GigaBytes) 'G' => 1024*1024*1024 (GibiBytes)
以此类推,对于'T'、'P'、'E'、'Z'、'Y'、'R'和'Q'也是如此。也可以使用二进制前缀:'KiB'='K','MiB'='M',等等。
'-C 大小'
'--line-bytes=大小'
尽可能多地将完整的输入行放入每个输出文件中,但不超过大小个字节。长度超过大小个字节的单独行或记录会被分割成多个文件。大小的格式与 --bytes 选项相同。如果指定了--separator选项,则行数确定记录的数量。
'--filter=命令'
使用此选项,不仅简单地将内容写入每个输出文件,还将内容通过管道写入指定的 shell 命令中进行处理。命令应该使用 $FILE 环境变量,该变量在每次调用命令时设置为不同的输出文件名。例如,假设您有一个1TB的压缩文件,如果解压缩,将会过大无法存放在二级存储中,但是您必须将其拆分为更易管理的单独压缩文件。为了实现这一点,您可以运行以下命令:
xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
假设压缩比为10:1,这将创建约50个大小为20GB的文件,文件名为big-aa.xz、big-ab.xz、big-ac.xz等。
'-n 块数'
'--number=块数'
将输入拆分为块数个输出文件,其中块数可以是:
n 根据当前输入的大小生成 n 个文件 k/n 仅将第 k 个文件输出到标准输出 l/n 生成 n 个文件,而不拆分行或记录 l/k/n 类似于上述,仅将第 k 个文件输出到标准输出 r/n 类似于 'l',但使用轮询分配 r/k/n 类似于上述,仅将第 k 个文件输出到标准输出
如果输入大小不是 n 的倍数,则早期的输出文件会比后期的输出文件长一个字节,以弥补差异。初始计算后出现的任何多余字节都会被丢弃(除非使用 'r' 模式)。
即使行数少于 n,或者输入被截断,也会创建所有 n 个文件。
对于 'l' 模式,块的大小约为输入大小 / n。尽管输入仍然被分割为大致相等大小的 n 个区域,但如果一行在一个区域内开始,它将完整地写入相应的文件中。由于行或记录即使重叠分区也不会被拆分,因此所写文件的大小可能大于或小于分区大小,甚至为空,如果一行或记录太长以至于完全与分区重叠。
当输入是管道或其他无法轻松确定大小的特殊文件时,对于'r'模式没有问题,因为输入的大小不相关。对于其他模式,这样的输入首先会被复制到临时文件以确定其大小。
'-a 长度'
'--suffix-length=长度'
使用长度为长度的后缀。如果指定长度为0,这与未指定(任何之前的)-a选项相同,从而启用默认行为,该行为将后缀长度从2开始,并且除非指定了 -n 或 --numeric-suffixes=from,否则将根据需要自动增加长度2。
'-d'
'--numeric-suffixes[=from]'
在后缀中使用数字而不是小写字母。如果指定了 from,则从 from 开始计数;否则从0开始计数。
from 支持长格式选项,并用于设置单个运行的初始后缀,或者设置独立拆分输入的后缀偏移量,因此上述自动后缀长度扩展被禁用。因此,您可能还想使用 -a 选项来允许超过 '99' 的后缀。请注意,如果指定了 --number 选项,并且文件数少于 from,则假定为单个运行,并且会自动确定所需的最小后缀长度。
'-x'
'--hex-suffixes[=from]'
类似于 --numeric-suffixes,但使用十六进制数字(小写形式)。
'--additional-suffix=后缀'
向输出文件名添加一个附加后缀。后缀不能包含斜杠。
'-e'
'--elide-empty-files'
抑制生成零长度的输出文件。如果使用 --number 选项,文件(被截断为)短于所请求的数量,或者一行太长以至于完全跨越一个块,就会发生这种情况。即使指定了此选项,输出文件序列号仍将连续运行。
'-t 分隔符'
'--separator=分隔符'
使用字符分隔符作为记录分隔符,而不使用默认的换行符(ASCII LF)。要指定 ASCII NUL 作为分隔符,请使用两个字符的字符串'\0',例如'split -t '\0。
'-u'
'--unbuffered'
在 --number r/… 模式下立即将输入复制到输出,这是一种速度较慢的操作模式。
'--verbose'
在每个输出文件打开之前写入诊断信息。
示例
以下是一些示例,用于说明 --number (-n) 选项的工作方式:
- 请注意,默认情况下,一行可能会被拆分为两个或多个部分:
$ seq -w 6 10 > k; split -n3 k; head xa? ==> xaa <== 06 07 ==> xab <== 08 0 ==> xac <== 9 10
- 使用“l/”修饰符来禁止此操作:
$ seq -w 6 10 > k; split -nl/3 k; head xa? ==> xaa <== 06 07 ==> xab <== 08 09 ==> xac <== 10
- 使用“r/”修饰符以轮询方式分配行:
$ seq -w 6 10 > k; split -nr/3 k; head xa? ==> xaa <== 06 09 ==> xab <== 07 10 ==> xac <== 08
- 您还可以提取第 K 个块。这将提取并打印33块中的第7个:
$ seq 100 > k; split -nl/7/33 k 20 21 22