awk 辅助查看日志
以nginx日志或者某厂商CDN日志为例,(注意不同日志,日志格式不同)
1.统计日志中出现一个可疑ip占用字节数
grep 8.8.8.8 /var/log/nginx/access.log |awk '{a=a+$10}END{print a,a*8/1024/1024/1024/600}'
注释:
(1).使用awk命令,读取一组文件中的第5列数据,并且把这组数据相加,接着,使用END关键字,当所有的输入文件都处理完毕时,对累加结果执行一次计算、格式化操作,最后输出相应值。
(2).将第1步中的计算结果乘以8,表示将字节转换成位;再除以1024*1024*1024,表示将位转换成吉位;最后除以600,表示将吉位转换成秒,得出网络传输速率或吞吐量的值,单位为Gbps。
2.awk通过正则匹配日志中存在以什么什么之后字符串
cat /var/log/nginx/access.log | awk -F'\t' '{match($2,/d=([a-zA-Z0-9]+)/,arr); print arr[1] }'
注释:
(1)- `-F'\t'` 表示将数据文件以制表符(\t)作为字段分割符进行分割。
(2)- `match($2, /d=([a-zA-Z0-9]+)/, arr)` 对第二个字段($2)进行正则匹配,匹配成功的部分将存放在名为arr的数组中。其中,`/d=([a-zA-Z0-9]+)/`是一个正则表达式,表示匹配包含"d="开头,后跟一个或多个字母或数字的字符串。
(3)- `print arr[1]` 将数组arr中的第一个匹配结果输出。由于正则表达式中设置了一个子表达式(即用括号括起来的一部分正则表达式),因此匹配的结果会存储在数组的第2个元素(即arr[2]),但是由于本命令中没有使用该结果,只需输出第1个元素即可。
3.awk 将日志中每个IP访问此和使用字节数统计出来
cat /var/log/nginx/access.log |awk '{ip[$1]++;bt[$1]+=$10}END {for (i in ip) {print i,ip[i],bt[i]}}' | sort -k 3nr
注释:
(1)`$1`代表日志文件中的第1列,即IP地址,`$10`代表第10列,即使用的字节数。`ip`和`bt`是数组,分别用于统计IP地址的出现次数和使用的字节数。`END`表示数据处理完毕后执行的操作,此处是将统计结果打印出来。`for`语句用来遍历所有IP地址及其对应的出现次数和字节数。
(2)`sort`命令中,并使用`-k`参数指定第3列(即字节数列)作为排序依据,`-n`表示按数字进行排序,`-r`表示按照从大到小的顺序进行排序。

浙公网安备 33010602011771号