我有一个 apache 日志文件。我需要报告有多少行(请求)来自特定上下文根。apache 日志已经以斜杠开头,上下文根位于第二个斜杠处。
Apache 日志示例:
11.222.33.44 - - [14/Feb/2013:00:27:33 -0600] "GET /lifecontent/monitor?test=siteseer&format=siteseer HTTP/1.1" 200 275 "-" "Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)" "SSL=on"
111.22.333.44 - - [14/Feb/2013:00:29:29 -0600] "GET /lc/Brokerage%20Manager/IDG%20Licensing%20and%20Appointment%20Process/IDG%20Franchise%20Reference%20Manual HTTP/1.1" 302 - "-" "(Windows NT)" "SSL=-"
两个上下文根将是“/生活内容/”和“/lc”
不确定哪种工具最好?我更喜欢 GUI 或批处理解决方案。
我主要只是想弄清楚每个上下文根在 apache 文件中的使用百分比。 (理想情况下,它可以一次搜索多个文件,但这不是必需的。)
答案1
你可以用一个简单的 shell 脚本来完成此操作:
cut -d/ -f4 access.log | sort | uniq -c | sort -g
该cut
命令提取第 5 个 / 分隔的字段(即“上下文根”),sort | uniq -c
然后计算每个出现的次数,并按sort -g
出现次数排序。
在我的网络服务器上运行此命令可得到:
5477 misc
11130 bzr
32181 raspbian
35912 files
43020 sites
答案2
我接受了 mgorven 的解决方案,因为它为我指明了最终可行的解决方案的正确方向。使用他的解决方案后,有时会出现查询字符串值,有时上下文根没有结尾斜杠。因此“/lc/”和“/lc”以及“/lc?x=y”被算作“lc”。所以我最终使用了这个解决方案:
cut -d" " -f7 access.log | cut -d? -f1 | cut -d/ -f2 | sort | uniq -c | sort -g
如果仅访问了“/”,则将显示已访问的单个文件和空行。
我也使用 UnxUtils.zip 在 Windows 上执行了此操作: http://sourceforge.net/projects/unxutils。我需要提取的内容只是剪切、排序、uniq。
谢谢 mgorven!!