我试图从我的apache日志文件中获得一些意义:我想parsing我的访问日志,并有一些关于200 status code命中(每个命中多less次)的统计信息。
所以我试着学习一些awk的魔法,在这里我现在得到了:
grep "HTTP/1.1\" 200" access.log | awk '{print $7 } ' | sort | uniq -c | sort -n
这是我要做的大部分事情:从access.log中select以200次命中结束的所有日志条目,然后select与生成的命中path对应的部分,对它们进行sorting,对每个唯一元素进行计数并根据数字进行sorting这个独特元素被击中的时代。
所以结果如下所示:
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
我试图进一步推动它:
access.log.1, ..., access.log.N ,我想获得统计所有这些统计。 我find的唯一的解决scheme是使用grep "my 200 expression" -R /pathToDirWithLogs这将grep目录中的所有文件,这显然是不好的,因为它不仅会logginggrep。 列出文件也不是一个选项,因为我不知道数字N. 11 /public/img/upload/* 18 /public/js/main.js 33 / 236 /index.html 这里public / img / upload表示在这里生成的所有命中:来自image_1的8个,来自image_2的2个和来自image_3的1个。
有没有awk,grep魔术师给我指路?
grep命令(与许多实用程序一样)将接受shell globbing提供的多个文件
grep -h "HTTP/1.1\" 200" /path/to/log/dir/access.log*
(或类似的)在这方面应该做你想做的事情。
你的问题的第二部分是不清楚的 – 我们怎么知道你对/public/img/upload中的单个文件不感兴趣,但是你对/public/js和/中的单个文件感兴趣,但显然不是/index.html 。
澄清这个要求可能会导致一个解决scheme,但你应该花一些时间来决定你想要什么,然后自己去。
你也可能对awstats感兴趣。