这是我参与更文挑战的第8天,活动详情查看:更文挑战
假如❤️我的文章有帮助,欢迎点赞、关注。这是对我继续技术创作最大的鼓励。更多文章在我博客
linuxsplit切割大日志文件场景
明天继续在家办公。今天晚上工作群里发来一个mysql机器io/负载上升的预警,异常发生在15:45~16:00之间。为了事后为了查明缘由,须要翻看慢查询日志slow.log才发觉日志8G多...故事就这样开始了
序言
前文总结过grep方式处理大文件的时侯:grep检索一次的时间消耗高、多行内容无法匹配多个关键字等困难。实在是难过啊split linux 分割文件如何安装linux,怎样办呢
转变思路
实在是难过啊,怎样办呢?
用前端处理大量数据的思路:就是把数据不断地细分,削峰填谷用时间换空间。
讲人话就是:既然文件大,一次处理不便捷。那就把文件平均劈成好几份不断细分。一次处理一份。处理的次数多了split linux 分割文件,但平均每次处理的数据量更小、时间更少、更迅速。体验也更好
思路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
设定输出文件名
里面看上去xaaxabxacxadxae就是输出文件中国linux,但并不直观。
所以能够对输出文件名进行设定
$ 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命令将切分后文件重新合并为同一文件:$catslow0*>original.log
总结
切割成小文件以后,无论是下载到本地再处理、本地查看、还是条件检索都十分便捷了