我们在某些时候,需要将文件分割为多个小的片段,早期像是软盘之类的设备容量有限,那么,将文件分割的更加小一些,以便可以存储到多个磁盘之中,,我们分割文件就是可以提高可读性,生成日志
首先我们测试一下如何分割大文件
首先创建一个大小为100KB的文件
dd if=/dev/zero bs=100k count=1 of=data.file
然后将其进行分割,拆分为更多更小的文件
split -b 10k data.file
ls
上面的命令将data.file分割为多个文件,每个文件的大小为10KB,都以xab,xac,xad的方式命名,
如果需要以数字为后缀,可以使用-d的参数,此外,使用-a length可以指定后缀长度
split -b 10k data.file -d -a 4
ls
split命令的其他选项还有如下的
比如,为分割后的文件指定文件名前缀
上面那些分割后的文件都有一个文件名前缀 x ,我们可以通过提供一个前缀名来使用我们自己的文件名前缀,split命令最后一个参数是PREFIX,格式如下
split [COMMAND_ARGS] PREFIX
split -b 10k test.file -d -a 4 test
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0000
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0001
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0002
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0003
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0004
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0005
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0006
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0007
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0008
-rw-rw-r–. 1 locker locker 10240 Jul 15 09:59 test0009
我们也可以按照行数来进行分割文件,使用 -l no_of_lines
split -l 10 data.file
或者使用csplit,能够根据指定的条件和字符串匹配选项对log文件进行分割
split只能根据数据大小或者行数进行分割,而csplit可以根据文本自身的特点进行分割,包括是否存在某个单词或者文本的内容都可以作为分割的文件的条件’
加入一个日志文件如下
我们需要将这个文件进行分割为对应的serverXX.log
使用如下的方法进行实现
csplit cstest.log /SERVER/ -n 2 {*} -s -f server -b “%02d.log”;
别忘了删除掉 server00.log,其数据为server00.log
我们首先指定了要分割的log文件,然后进行了对应的编写命令
具体的后面参数,依次为
/SERVER/ 用来匹配某一行,分割过程从此开始
/[REGEX]/ 表示文本样式,从当前行知道包含SERVER 的匹配行
{*} 表示根据匹配重复执行分割,直到文件末尾,如果是{整数},那么会限制执行的次数
-s 使得命令进入了静默模式,不打印其他的信息
-n 指定分割后的文件名后缀的数字个数,例如01,02,03等
-f 指定了前缀
-b 指定了后缀,例如’%02d.log’ 类似C语言中的printf的参数格式,这里的文件名= 前缀 + 后缀 = server+ %02d.log