从nginx日志获取用户代理列表

我有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的httpdcombined格式相同,并且以User-Agent作为最后一个字段,由"分隔。

Webalizer可以做到这一点。

例:

 webalizer -o reports_folder -M 5 log_file 
  • -o reports_folder指定生成报告的文件夹
  • -M 5仅显示浏览器名称和主版本号
  • log_file指定日志文件名称
  • 来源: ftp : //ftp.mrunix.net/pub/webalizer/README

这是接受的答案略有变化,使用fgrepcut

 cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn 

如果可能的话,使用“较弱”的命令是有吸引力的。

Awstats应该做的伎俩,但将提供更多的信息。 我希望这有帮助…

我会使用shell脚本:猫,awkpipe道,sorting和uniq将完成这项工作