Linux dd、split、csplit命令(3)

上面的文件中虽然只有三个段落:SERVER-1,SERVER-2,SERVER-3,但切分的结果生成了4个小文件,并且注意到第一个小文件大小为0字节。为什么会如此?因为在模式匹配的时候,每匹配到一行,这一行就作为下一个小文件的起始行。由于此文件第一行"SERVER-1"就被/SERVER/匹配到了,因此这一行是作为下一个小文件的内容,在此小文件之前还自动生成一个空文件。

生成的空文件可以使用"-z"选项来删除。

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

还可以指定只拷贝匹配到的行偏移数量。例如,匹配到行时,只拷贝它后面的1行(包括它自身共两行),但多余的行将放入下一个小文件中。

[root@linuxidc ~]# csplit -f test2_ -z -b %04d.log test.txt /SERVER/+2 {*} 42 139 140 98

第一个小文件只有两行。

[root@linuxidc ~]# cat test2_0000.log SERVER-1 [connection] 192.168.0.1 success

SERVER-1段落的其余内容放入到了第二个小文件中。

[root@linuxidc ~]# cat test2_0001.log [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

同理第三个小文件也一样,直到最后一个小文件中存放剩余所有无法匹配的内容。

[root@linuxidc ~]# cat test2_0003.log [connection] 192.168.0.2 pending [disconnect] 192.168.0.3 pending [connection] 192.168.0.4 failed

指定"-s"或"-q"选项以静默模式运行,将不会输出小文件的大小信息。

[root@linuxidc ~]# csplit -q -f test3_ -z -b %04d.log test.txt /SERVER/+2 {*}

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

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