grep/awk/sed查指定时间段日志
情景重现:管理后台down了,项目的日志为4G多的一个文件,查询上午某段时间内的日志
示例的日志格式:2020-07-09 10:15:46.635 [...-thread-3] ERROR com....
①grep
命令:grep '时间' '日志文件名'
1、示例:如查询2020-07-09 10:10到2020-07-09 10:15区间的日志
grep "2020-07-09 10:1[0-5]" catalina.out
2、示例:如查询当天10点到11点的日志
grep "2020-07-09 1[0-1]" catalina.out
注:亲测有效
图1
②awk命令
1、示例:如查询今天10:10:10 到10:15:59区间的日志,注意时间要用引号
awk '$2>"10:10:10" && $2<"10:15:59"' catalina.out
注意参数$1和$2的取值,我这里$1是指年月日,$2是指时分秒。
扩展:$0表示行所有信息,$1、$2、$3...$n分别表示第1列、第2列、第3列...第n列(以空格为默认分隔符将每行切片)。awk命令经常会使用这些符号去做匹配、打印指定指定列等操作
日志格式为:2020/07/09-05:02:37 >> INFO >>
则:awk '$1>"2020/07/09-05:01:38" && $1<"2020/07/09-05:02:38"' catalina.out
注:亲测有效
图2
③sed命令
1、示例:如查询2020-07-09 10:10到2020-07-09 10:15区间的日志
sed -n '/2020-07-09 10:10:00/,/2020-07-09 10:15:00/p' catalina.out
注:由于我项目日志格式:2020/07/09-11:50:59 ERROR https-jsse-nio-8080-exec-2 对于该命令没有适用
查询结果生成日志文件:linux中>表示覆盖原文件内容(文件的日期也会自动更新),>>表示追加内容(会另起一行,文件的日期也会自动更新)。
可以将查询截取的日志生成一个新的日志文件来方便查询,实例:grep "2020-07-09 1[0-1] " catalina.out >> queryTemporaryLog20200709.log
希望对你有帮助,祝你有一个好心情,加油!
若有错误、不全、可优化的点,欢迎纠正与补充!