Shell脚本100例:9 按照时间截取日志文件

Shell脚本100例:9 按照时间截取日志文件

在工作中我们经常通过统计日志来诊断应用,比如PV或UV等,如何快速的统计固定的时间内日志呢?今天将使用awksed来统计,两者都可以实现但是有点差别。

以nginx的访问日志为例,以下是日志的格式。

1.1.1.1 - - [27/Aug/2018:10:40:01 +0800] "GET /xml/important_news_day.json?b1535337602058=1 HTTP/1.1" 200 225 "https://www.abc.

com/health/13001507/20180827/33695845.html?newsbaidu" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/68.0.3440.106 Safari/537.36" "2.2.2.2"

需求统计10:40到10:45的日志进行分析。

使用sed -n进行日志截取

sed -n '/27\/Aug\/2018:10:40:00/,/27\/Aug\/2018:10:45:59/p' access.log

使用awk进行日志截取

awk -F "[ /:]" '$7":"$8>="10:40" && '$7":"$8<="10:45"'access.log

说明:-F 指定分隔符;[ /:] 以空格和/和:作为分隔符;&& 逻辑与的意思。

两者虽然都可以截取某个时间段的日志,但是会发现统计的日志条目不相同,原因是awk使用判断时间比较精确,而sed在统计结尾时间的时候只会统计一个带有2018:10:45:59时间戳的日志。


分享到:


相關文章: