Linux dd、split、csplit命令(2)

[root@linuxidc ~]# seq 1 2 15 | split -l 3 -d - new_ [root@linuxidc ~]# ls new* new_00 new_01 new_02

可以为每个小文件追加额外的后缀。有些老版本的split不支持该选项,而是在csplit上支持的,但是新版本的split已经支持。例如,加上".log"。

[root@linuxidc ~]# seq 1 2 20 | split -l 3 -d -a 3 --additional-suffix=".log" - new1_ [root@linuxidc ~]# ls new1* new1_000.log new1_001.log new1_002.log new1_003.log

1.3 csplit命令

split只能按行或按照大小进行切分,无法按段落切分。csplit是split的变体,功能更多,它主要是按指定上下文按段落分割文件。

csplit [OPTION]... FILE PATTERN... 描述:按照PATTERN将文件切分为"xx00","xx01", ...,并在标准输出中输出每个小文件的字节数。 选项说明: -b FORMAT:指定文件后缀格式,格式为printf的格式,默认为%02d。表示后缀以2位数值,且不足处以0填充。 -f PREFIX:指定前缀,不指定是默认为"xx"-k:用于突发情况。表示即使发生了错误,也不删除已经分割完成的小文件。 -m:明确禁止文件的行去匹配PATTERN。 -s:(silent)不打印小文件的文件大小。 -z:如果切分后的小文件中有空文件,则删除它们。 FILE:待切分的文件,如果要切分标准输入数据,则使用"-"。 PATTERNs: INTEGER :数值,假如为N,表示拷贝1到N-1行的内容到一个小文件中,其余内容到另一个小文件中。 /REGEXP/[OFFSET]:从匹配到的行开始按照偏移量拷贝指定行数的内容到小文件中。 :其中OFFSET的格式为"+N""-N",表示向后和向前拷贝N行 %REGEXP%[OFFSET]:匹配到的行被忽略。 {INTEGER} :假如值为N,表示重复N此前一个模式匹配。 {*} :表示一直匹配到文件结尾才停止匹配。

假设文件内容如下:

[root@linuxidc ~]# cat test.txt SERVER-1 [connection] 192.168.0.1 success [connection] 192.168.0.2 failed [disconnect] 192.168.0.3 pending [connection] 192.168.0.4 success SERVER-2 [connection] 192.168.0.1 failed [connection] 192.168.0.2 failed [disconnect] 192.168.0.3 success [CONNECTION] 192.168.0.4 pending SERVER-3 [connection] 192.168.0.1 pending [connection] 192.168.0.2 pending [disconnect] 192.168.0.3 pending [connection] 192.168.0.4 failed

假设每个SERVER-n表示一个段落,于是要按照段落切分该文件,使用以下语句:

[root@linuxidc ~]# csplit -f test_ -b %04d.log test.txt /SERVER/ {*} 0 140 139 140

"-f test_" 指定小文件前缀为"test_", "-b %04d.log" 指定文件后缀格式"00xx.log",它自动为每个小文件追加额外的后缀".log", "/SERVER/" 表示匹配的模式,每匹配到一次,就生成一个小文件,且匹配到的行是该小文件中的内容, "{*}" 表示无限匹配前一个模式即/SERVER/直到文件结尾,假如不知道{*}或指定为{1},将匹配一次成功后就不再匹配。

[root@linuxidc ~]# ls test_* test_0000.log test_0001.log test_0002.log test_0003.log

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13489.html