在处理过程中,对几种常用的日志截取方法进行了汇总和测试:
截取日志段的的方法汇总与测试
方式一: 确定时间段的行号,使用head和tail命令截取 搜索时间: Time: 151212 00:00:00 先到gg,到文件最前面,然后搜索 /Time: 151212 ,得到: 1979016 # Time: 151212 0:00:15
文件总行数为: # wc -l slow-query-169-1212.log 1999422 slow-query-169-1212.log 1999422 limit 0,20;
然后在到文件最后面,G, 搜索4点之后开始的文件 /Time: 151212 4 ,得到: 1987392 # Time: 151212 4:00:05
确定需要查询的时间段行号后,使用head和tail命令进行截取: >>> 1987392 - 1979016; 8376
需要截取的日志,最后行号为 1979016,想用head 命令,然后在用tail命令截取最后的 8376 行即可,命令为: head -n 1979016 slow-query-169-1212.log | tail -n 8376 > slow-query-169-1212_00-03.log
方式二: 确定时间段的行号,使用sed命令截取 截取 151212 0-3点之间的慢查询日志: sed -n '1979016,1987392p' slow-query-169-1212.log > slow-query-169-1212_00-03.log
>>> 1987392 - 1979016; 8376 该部分文件,应该有 8376 行数据;确认正常;
方式三:确定时间段行号后,使用awk命令截取 截取 151212 0-3点之间的慢查询日志: awk -F"\n" '{if(NR>=1979016&&NR <=1987392)print 0="" 1="" 2="" 6="" 151211="" 151212="" slow-query-169-1212.log="" slow="" time:="" 0:00:15="" sed="" -n="" part.log="" -3="" pt-query-digest="" slow-query-169-1212_00-03.log="" whole.log="" .="" head="" tail="" awk="" nr="">=2&&NR <=6)print $0 }' file