⼤⽇志分割的⼏种⽅法
本⽂介绍⼤⽇志分割的⼏种⽅法。
当⽇志容量上G的时候,⽤vi查看具体内容效率就会变得特别低,这个时候就需要将⼤⽇志进⾏分割。
为了⽐较各种分割⽅法的效果,我选取的测试⽇志基本信息如下:
1. split ⽅法分割
split命令专门⽤来将⼀个⼤⽂件分割成很多个⼩⽂件,我把split命令的选项做⼀个简要说明
选项
含义-b
分割后的⽂档⼤⼩,单位是byte -C
分割后的⽂档,单⾏最⼤byte数-d
使⽤数字作为后缀,同时使⽤-a length指定后缀长度-l 分割后⽂档的⾏数
为了尽量保证⽇志的可读性,我们按⾏分割⼤⽇志⽂件,并且指定分割后的⽂件的前缀和后缀
2. dd 分割
分割后的效果# ls  -lrth test.log -rw-r--r-- 1 root root 645M 5⽉  30 20:42 test.log # wc -l test.log 8856340 test.log
1
2
3
4#后缀是数字,占两位,前缀是test .log split  -l  1000000 test .log  -d  -a  2 test .log #分割之后的结果ls  -lrth 总⽤量 1.3G -rw -r --r -- 1 root  root  645M  5⽉  30 20:42 test .log -rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log00-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log01-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log02-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log03-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log04-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log05-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log06-rw -r --r -- 1 root  root  73M  5⽉  30 20:55 test .log07-rw -r --r -- 1 root  root  64M  5⽉  30 20:55 test .log08
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15dd bs=1M count =300 if =test.log  of =newlog .1dd bs=1M count =300 if =test.log  of =newlog .2 skip=300dd bs=1M count =300 if =test.log  of =newlog .3 skip=600
1
2
3
在上⾯使⽤的命令中,bs代表数据块的⼤⼩,count表⽰复制的块数,if表⽰输⼊⽂件,of表⽰输出⽂件。
这个命令不能⼀下就把⽂件分割到我们想要的状态,⽽且很有可能⼀⾏⽇志被分到两个⽂件中。
3. head+tail 分割
⽤这两个命令获取⽂件部分内容,然后重定向就能实现⽂件分割,但是限制也挺多,只能把⽂件分成两部分,如果⽂件特别⼤,想要达到预期的效果,就要⼀直分割下去。
head/tail -n $⾏数 test.log > newlog
因为这两个命令都⽐较熟悉,不再多讲。
4. sed 实现分割
实现原理就是⽤sed截取特定⾏之间的内容,然后进⾏重定向。
$表⽰最后⼀⾏,这个如果分割过多,也需要⼀个循环。
5. awk 实现分割
实现原理和sed差不多,因为使⽤awk不多,这⾥只举⼀个⼩例⼦:
还是split⽤得舒服。
来源:blog.csdn/u012949658/article/details/72812236ls -lrth 总⽤量 1.3G -rw-r --r-- 1 root root 645M 5⽉  30 20:42 test.log -rw-r --r-- 1 root root 300M 5⽉  30 21:07 newlog .1-rw-r --r-- 1 root r
oot 300M 5⽉  30 21:07 newlog .2-rw-r --r-- 1 root root  45M 5⽉  30 21:07 newlog .3
1
2
3
4
5
6sed -n  '1,2000000p' test.log  > test.log .1sed -n  '2000001,4000000p' test.log  > test.log .2sed -n  '4000001,6000000p' test.log  > test.log .3sed -n  '6000001,8000000p' test.log  > test.log .4sed -n  '8000001,$p' test.log  > test.log .5
1
2
3
4
5awk ‘{if  (NR<120000) print  $0}’ test.log  > a.txt awk ‘{if  (NR>=120000) print  $0}’ test.log  > b.txt
1
大文件发送2