我有nginx日志文件,我想找出每个主要版本的浏览器的市场份额。 我对小版本和操作系统不感兴趣。 我想得到这样的东西:
100 IE6 99 IE7 20 IE8 200 FF2 300 FF3
我知道如何从文件中获取用户代理的列表,但是我想汇总列表以仅查看主要版本的浏览器。 有没有工具可以做到这一点?
awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
awk(1)
– selectGET请求的完整用户代理string cut(1)
– 用它的第一个单词 sort(1)
– sorting uniq(1)
– 计数 sort(1)
– 按计数sorting,颠倒过来 PS。 当然,它可以被一个awk
/ sed
/ perl
/ python
/ etc脚本替代。 我只是想展示unix-way的丰富程度。
虽然SaveTheRbtz的一个class轮完成了这项工作,但是花了几个小时来parsing我的nginx
访问日志。
这是一个基于他的更快的版本,每100MB的日志文件(对应于大约100万行)需要不到1分钟的时间:
sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg
它使用nginx
默认的访问日志格式,这与Apache的httpd
的combined
格式相同,并且以User-Agent
作为最后一个字段,由"
分隔。
Webalizer可以做到这一点。
例:
webalizer -o reports_folder -M 5 log_file
-o reports_folder
指定生成报告的文件夹 -M 5
仅显示浏览器名称和主版本号 log_file
指定日志文件名称 这是接受的答案略有变化,使用fgrep
和cut
。
cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn
如果可能的话,使用“较弱”的命令是有吸引力的。
Awstats应该做的伎俩,但将提供更多的信息。 我希望这有帮助…
我会使用shell脚本:猫,awkpipe道,sorting和uniq将完成这项工作