likes
comments
collection
share

linux split 切割大日志文件

作者站长头像
站长
· 阅读数 11

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

linux split 切割大日志文件

场景

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

前言

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

转变思路

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

用后端处理大量数据的思路:就是把数据不断地细分,削峰填谷用时间换空间。 讲人话就是:既然文件大,一次处理不方便。那就把文件平均切成好几份不断细分。一次处理一份。处理的次数多了,但平均每次处理的数据量更小、时间更少、更迅速。体验也更好

思路 split 切分文件

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

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

具体参数如下:

-a, --suffix-length=N
    使用的后缀长度 (默认为 2)
-C, --line-bytes=SIZE
    每个输出文件每行的最大字节大小
-d, --numeric-suffixes
    输出文件使用数字后缀代替字母后缀(默认:字母后缀)

-b, --bytes=SIZE
    输出每个文件的大小
-l, --lines=NUMBER
    输出每个文件的内容行数

切分大文件

下面举几个例子:

文件大小切割

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 行)分割成多个文件

$ wc -l slow3306_9105.log
1502216 slow3306_9105.log   # 查看文件总行数
$ split -d -l 50000 slow3306_9105.log  slow.log
$ ls
slow3306_9105.log  slow.log00  slow.log01  slow.log02  slow.log03  slow.log04

输出文件保持 log 文件后缀

生成后的文件名有一点问题,我们本来需要的是*.log文件后缀,现在分割后的文件序号跑到了文件后缀的后面,需要处理一下:

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


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

后悔药:日志合并

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

总结

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