曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3026|回复: 0
打印 上一主题 下一主题

csplit -- 根据文件内容分割文件

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2012-3-24 22:11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
csplit 命令是split 命令的一个变种。split 只能根据文件大小和文件中的行数来分割文件,而 csplit 则可以根据文件内容来分割文件,这一特性在对分割一个内容具有一定规律分块的日志文件来说比较有用,比如下面的一个日志文件:
# cat tmp.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 failed
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-4
[connection] 192.168.0.5 pending
[connection] 192.168.0.7 success
[disconnect] 192.168.0.8 failed
[connection] 192.168.0.2 failed
对上面的文本使用 csplit 进行分割:
# csplit tmp.txt /SERVER/ -n 3 -s {*} -f server -b "%03d.log"; rm server000.log
# ls *.log
server001.log  server002.log  server003.log  server004.log
# cat server001.log
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
# cat server004.log
SERVER-4
[connection] 192.168.0.5 pending
[connection] 192.168.0.7 success
[disconnect] 192.168.0.8 failed
[connection] 192.168.0.2 failed
在上面的命令中,/SERVER/ 是正则表达式匹配,这里匹配的是文本中含有的 SERVER 字样,也就是我们希望 SERVER 这样的行作为分割的界限。

-n 选项后接一个数字,该数字表示分割文件的文件名中后缀序号的位数,比如上面的 001, 002, 003 等这些序号是 3 位的。

-s 选项表示采用静默模式,在运行命令时不会输出其它的信息。

{*} 表示根据上面所匹配的正则表达式进行重复分割,直到文件末尾。这么做的结果就如同上面输出所示的,每个分割后的文件里还有一个分割段落。还可以时用 {interger} ,比如 {3} 表示会产生 3 个分割文件,第 1 个分割文件是 SERVER-1 段落,第 2 个分割文件是 SERVER-2 段落,第 3 个分割文件将包含 SERVER-3 和 SERVER-4 两个段落。

-f 指定分割文件名前缀,如上面的 server。

-b 指定分割文件名的后缀,它后接的格式如同 C 语言中的 printf() 函数,如这里是 "%03d.log" ,它指示了文件名后缀部分的输出样式,其中 .log 的前面含有 3 位的整数长度,一般和上面的 -n 选项指定的位数是一致的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 03:59 , Processed in 0.073596 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表