继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

linux spilt 切割大日志文件

锐玩道
关注TA
已关注
手记 70
粉丝 154
获赞 1427

如果❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。[更多文章在我博客] coderdao.github.io/

场景

今天隔离还在继续,在家办公。忽然下午午工作群里发来一个 mysql 机器io/负载上升的预警,异常发生在 15:45 ~ 16:00 之间。为了事后为了查明原因,需要翻看慢查询日志 slow.log 才发现日志 8G 多… 故事就这样开始了
图片描述

前言

前文 总结过 grep 方法 处理大文件的时候grep 检索一次的时间消耗高多行内容难以匹配多个关键字 等困难。实在是难受啊,怎么办呢

转变思路

实在是难受啊,怎么办呢?

用后端处理大量数据的思路:就是把数据不断地细分,削峰填谷用时间换空间

简单理解:既然文件大,一次处理不方便。就把文件不断细分、切成好几份。一次处理一份。处理的次数多了,但平均每次处理的数据量更小、时间更少、更迅速。体验也更好

思路 split 切分文件

split 是 linux 常用的 文件切分方法。它支持按行、大小等方式进行切分。

split命令的语法如下:split [-a ][-b][-C ][-l ][被切割文件路径][输出文件名前缀]

具体参数如下:
图片描述

切分大文件

下面举几个例子:

文件大小切割

slow3306_9105.log 文件 按文件大小(每个文件 10m)分割成多个文件

$ split -b 10m slow3306_9105.log
$ ls
slow3306_9105.log  xaa  xab  xac  xad  xae

设定输出文件名

上面看起来 xaa xab xac xad xae 就是输出文件,但并不直观。

所以还能对输出文件名进行设定

$ split -d -b 10m slow3306_9105.log slow.log
$ ls
slow3306_9105.log  slow.log00  slow.log01  slow.log02  slow.log03  slow.log04 

文件行数切割

slow3306_9105.log 文件 按 行数(每个文件 5w 行)分割成多个文件
图片描述

输出文件保持 log 文件后缀

生成后文件名都是 .log0* ,生成的后缀被追加到最后影响文件格式。而需要.log文件结尾的话,可以使用下面命令 将分割后的文件序号调整至文件名后,不影响文件后缀:

for i in `ls|grep slow`; do a=`echo $i|awk -F '.log' '{print $1$2".log"}'`; mv $i $a; done

图片描述

后悔药:日志合并

如果你切着切着把文件且太细了(不是一般人)。那么附带记录一个 多个文件合并的方法cat 命令将切分后文件 重新合并 为同一文件:$ cat slow0* > original.log

总结

切割成小文件之后,无论是下载到本地再处理、本地查看、还是条件检索都非常方便了

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP