在工作中我们经常通过统计日志来诊断应用,比如PV或UV等,如何快速的统计固定的时间内日志呢?今天将使用awk和sed来统计,两者都可以实现但是有点差别。
以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时间戳的日志。
閱讀更多 運維小筆記 的文章