我试图从我的 apache 日志文件中获取一些含义:我想解析我的访问日志并获得一些有关200 status code
点击次数的统计数据(每个点击次数有多少)。
因此我尝试学习一些 awk 魔法,下面是我现在得到的结果:
grep "HTTP/1.1\" 200" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
它完成了我想要的大部分事情:它从 access.log 中选择出所有命中次数达到 200 的日志条目,然后选择与命中生成的路径相对应的部分,对它们进行排序,计算每个唯一元素的数量,并根据命中该唯一元素的次数进行排序。
结果如下:
1 /public/img/upload/image_3.jpg
2 /public/img/upload/image_2.jpg
8 /public/img/upload/image_1.jpg
18 /public/js/main.js
33 /
236 /index.html
我正在尝试进一步推动它:
- 因为我有 logrotate,所以我还有许多其他类似的文件
access.log.1, ..., access.log.N
,我想获取所有这些文件的统计数据。我发现的唯一解决方案是使用grep "my 200 expression" -R /pathToDirWithLogs
将 grep 目录中的所有文件,这显然不太好,因为它不仅会 grep 日志。列出文件也不是一种选择,因为我不知道 N 的数量。 - 我并不真正关心 /public/img/upload/ 中的每个文件,我只关心其中有多少个被选中。我完全不知所措,不知道如何开始。但这里有一个示例,我想要我的简单输出
11 /public/img/upload/* 18 /public/js/main.js 33 / 236 /index.html
这里 public/img/upload 代表在那里生成的所有命中:8 次来自 image_1,+2 次来自 image_2,1 次来自 image_3。
有没有 awk、grep 魔术师来给我指路?