⼤⽇志分割的⼏种⽅法
本⽂介绍⼤⽇志分割的⼏种⽅法。
当⽇志容量上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
发布评论