废话不多说,简单了解一下 awk
- 强大的文本分析工具,也就是分析日志
最常用的就是分析日志了吧,做统计什么,这里也拿 nginx 日志来做分析
1:统计出现次数
- 比如状态码出现次数
- 先直接上命令
awk ‘{print $9}‘ access_log | sort | uniq -c | sort -rn
- 可能会有一些疑惑,这个$9 是什么?
- 我们拿出一条日志来看一下先
123.124.16.83 - - [10/Oct/2018:10:24:56 +0800] "GET /static/favicon.ico HTTP/1.0" 200 5430 "https://xxx.com/" "Hm_lvt_d0ce2d118b3d24552ed32f2e7328f548=1534905921; ZYBUSS=R2ccj7ZaT-_bVrhEd_nra2QQB8vcYqWqdRAIXYZlhj07qNVt05nxfnRZB-IU75Yn" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" 0.001 1496233492 123.124.16.83 192.168.240.255
- 我们可以看到我们需要状态码的状态码,但是,他在第几位呢?
- 在 awk 中,只要碰到空格,就说明它占了一位,也就是说
$1 123.124.16.83 $2 - $3 - $4 [10/Oct/2018:10:24:56 .... SO $9 状态码
这样我们就找到我们的状态码,之后的 sort | uniq 命令,可以自己看下,会更好的理解这个命令
2:筛选特定的日志
- 比如我们发现了异常,要找到所有状态码为 302 的 access_log
- 直接上命令
awk ‘$9~/302/{print}‘ accrss_log
- 之前我们已经找到了 $9 是我们的状态码
- 这里使用了 正则 匹配所有等于 302 的状态码
- 当然,awk 也支持其他的方式
比如,使用 == 来匹配 awk ‘$9=="302" {print}‘ access_log
- 这里列出条件操作符
< 小于 <= 小于等于 == 等于 != 不等于 > 大于 >= 大于等于 ~ 匹配正则表达式 !~ 不匹配正则表达式
原文地址:https://www.cnblogs.com/25-lH/p/9765644.html
时间: 2024-12-11 19:41:45