优秀的编程知识分享平台

网站首页 > 技术文章 正文

活该你不懂!服务器日志分析之Awk-substr数组

nanyue 2025-01-24 13:18:28 技术文章 6 ℃

恭喜查看本文的读者,一定让你学会这个知识。

不说废话,直接看!如下是日志格式,
$4字段是[01/Aug/2016:01:02:00 +0800],请求的日志记录时间

1.1.1.1 - - [01/Aug/2016:01:02:00 +0800] "GET http:********
2.2.2.2 - - [01/Aug/2016:01:02:00 +0800] "GET http:********
3.3.3.3 - - [01/Aug/2016:01:02:01 +0800] "GET http:********
......

一、想知道01时内,每分钟的请求数

先grep下然后再分析?那会不会累趴。。

二、想知道某几个小时内每个小时的请求数,那还可能用:

zcat 日志文件|grep "Aug/2016:01:"|wc -l
然后下一个小时就grep下02、03、04的。虽然不是好办法,至少也算是办法吧~~

三、先丢出命令再说

$ zcat 2016-08-01-02-*|awk '{a[substr($4,17,2)]++}END{for(i in a) print i "分",a[i]}'|sort -n

$ zcat 2016-08-01-0[2-8]-*|awk '{a[substr($4,14,2)]++}END{for(i in a) print i "时",a[i]}'|sort -n

我的日志是用zcat查看的,如果测试自己的日志,根据自己日志格式来定是cat还是zcat。

上面的方法提升效率不知道快了多少倍吧!知其然还需要知其所以然,下面花1分钟解释下:

{a[substr($4,14,2)]++}
substr($4,14,2)根据每行日志的$4字段(awk默认用了空额来分隔),也就是这一段:
[01/Aug/2016:01:02:00,然后从左往右数第14个字符开始,数2个字符,就是“小时”字段,也就是substr($4,14,2)

把这两个字符放到a[ ]++数组里,相同时候就++,END后打印出来便得到每个数组的次数。

根据日志的时间字段修改下substr($4,14,2)内3段即可。

如上,花个1分钟学会!~转发收藏~,记得每天来查收一篇@all
点击"关注"申请关注本头条号,每天没学到点知识,怪我咯?关注每天给你一点小知识。

Tags:

最近发表
标签列表