拥有combined
access_log
nginx 或 apache 标准格式的日志文件,您将如何在 UNIX shell 中计算给定引用者曾经带来的每个访问者(即 IP 地址)的访问次数或页面浏览量(即总请求)?
换句话说,每个访问者在另一个站点上找到指向您的站点的链接的所有请求的数量。
拥有combined
access_log
nginx 或 apache 标准格式的日志文件,您将如何在 UNIX shell 中计算给定引用者曾经带来的每个访问者(即 IP 地址)的访问次数或页面浏览量(即总请求)?
换句话说,每个访问者在另一个站点上找到指向您的站点的链接的所有请求的数量。
我能想到的最好的片段如下:
fgrep http://t.co/ /var/www/logs/access.log | cut -d " " -f 1 | \
fgrep -f /dev/fd/0 /var/www/logs/access.log | cut -d " " -f 1 | sort | uniq -c
这是做什么的?
我们首先http://t.co/
在日志条目中找到访问的唯一 IP 地址。(请注意,这只会计算直接来自参考的访问,而不是那些留下并进一步浏览该网站的访问。)
在获得一个 IP 地址列表之后,在某一时刻,从给定的 URL 引用,我们通过管道将这个列表传递给另一个列表fgrep
—— stdin
(/dev/fd/0
一个非常低效的替代方法是xargs -n1 fgrep access.log -e
代替fgrep -f /dev/fd/0 access.log
)从这些地址中查找所有命中。
在第二个之后fgrep
,我们得到了与第一步相同的 IP 地址集,但现在它们根据请求的总数重复 - 现在sort
,,uniq -c
完成。:)