我偶尔会在终端中使用此行来查看哪个用户代理更多地使用我的服务器。
cat /var/log/apache2/access.log | awk -F\" '{print $6}' | sort | uniq -c | sort -n
扫描 access.log 并按升序显示多次发现的用户代理。
结果是这样的:
10283 Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1
23247 Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
40063 MauiBot ([email protected])
143724 Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
192741 Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
我不知道它是如何工作的,很久以前我在某个地方找到它或者有人给了我日期,我不记得了。
无论如何,除了订购 IP 之外,是否可以做同样的事情?
答案1
我认为 IP 位于日志的第一列,请尝试
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -n
答案2
从你在那里使用的事实来看awk -F \" { print $6}
,这看起来像组合日志格式,其中应该有 IP 地址$1
。从那里,我们可以这样做awk 中的 uniq,然后将其与对关联数组中的索引进行排序。
access.log
使用如下模拟文件:
127.0.0.1 - - [05/Feb/2012:17:11:55 +0000] "GET / HTTP/1.1" 200 140 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19"
192.168.0.2 - - [05/Feb/2012:17:11:55 +0000] "GET / HTTP/1.1" 200 140 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19"
127.0.0.1 - - [05/Feb/2012:17:11:55 +0000] "GET / HTTP/1.1" 200 140 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19"
代码awk
应该是这样的:
$ awk '{!a[$1]++}; END{n=asorti(a,sorted);for(i=1;i<=n;i++) print sorted[i],":",a[sorted[i]]}' access.log
127.0.0.1 : 2
192.168.0.2 : 1
对于按每个 IP 地址的条目数进行数字排序,我们可以坚持sort
到最后:
$ awk '{!a[$1]++}; END{for(val in a) print val,":",a[val];}' access.log | sort -n --field-separator=":" -k 2,2
当然,您应该使用它/var/log/apache2/access.log
作为您的实际输入文件。