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

Žel*_*pin 7 nginx log-files logging parsing

我有 nginx 日志文件,我想找出每个主要浏览器版本的市场份额。我对次要版本和操作系统不感兴趣。我想得到这样的东西:

100 IE6
 99 IE7
 20 IE8
200 FF2
300 FF3
Run Code Online (Sandbox Code Playgroud)

我知道如何从文件中获取用户代理列表,但我想汇总列表以仅查看浏览器的主要版本。有没有工具可以做到?

Sav*_*btz 22

awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
Run Code Online (Sandbox Code Playgroud)
  • awk(1) - 选择完整的 GET 请求的 User-Agent 字符串
  • cut(1) - 使用它的第一个词
  • sort(1) - 排序
  • uniq(1) - 数数
  • sort(1) - 按计数排序,反向

附注。当然,它可以通过一个被替换awk/ sed/ perl/ python/等脚本。我只是想展示 unix-way 是多么的丰富。


小智 6

虽然SaveTheRbtz一个 liner完成了这项工作,但解析我的nginx访问日志需要几个小时。

这是一个基于他的更快的版本,每100MB的日志文件花费不到1分钟(对应大约100万行):

sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg
Run Code Online (Sandbox Code Playgroud)

它的工作原理与默认的访问日志的格式nginx,这是一样的combinedApache的格式httpd,并具有User-Agent作为最后一个字段,通过分隔"