Shell 统计PV, UV ,独立IP

每天分析日志的哥们实在伤不起,经常需要给出PV,UV,独立IP等一些统计值,使用C/C++,java都可以写,过程是这样的,先读取文件,逐行扫描,把能标记的值放入数据结构中,排重得出最终结果,其实Linux本身有很强大的文本处理功能,完全可以用shell + 一些文本小工具得出结果。

Nngix输出的access log文件如下:

日志文件代码 复制代码 收藏代码
  1. 192.168.1.166--119272312[05/Nov/2011:16:06:59+0800]"GET/index.htmlHTTP/1.1"200370"http://192.168.1.201/""Chrome/15.0.874.106""-"
  2. 192.168.1.166--119272312[05/Nov/2011:16:06:59+0800]"GET/poweredby.pngHTTP/1.1"2003034"http://192.168.1.201/""Chrome/15.0.874.106""-"
  3. 192.168.1.177--1007071650[05/Nov/2011:16:06:59+0800]"GET/favicon.icoHTTP/1.1"4043650"-""Chrome/15.0.874.106""-"
  4. 192.168.1.178--58565468[05/Nov/2011:16:17:40+0800]"GET/HTTP/1.1"2003700"-""Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0)""-"
  5. 192.168.1.166--119272312[05/Nov/2011:16:17:40+0800]"GET/nginx-logo.pngHTTP/1.1"200370"http://192.168.1.201/""Chrome/15.0.874.106""-"
192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /index.html HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"192.168.1.166 - - 119272312 [05/Nov/2011:16:06:59 +0800] "GET /poweredby.png HTTP/1.1" 200 3034 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"192.168.1.177 - - 1007071650 [05/Nov/2011:16:06:59 +0800] "GET /favicon.ico HTTP/1.1" 404 3650 "-" "Chrome/15.0.874.106" "-"192.168.1.178 - - 58565468 [05/Nov/2011:16:17:40 +0800] "GET / HTTP/1.1" 200 3700 "-" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" "-"192.168.1.166 - - 119272312 [05/Nov/2011:16:17:40 +0800] "GET /nginx-logo.png HTTP/1.1" 200 370 "http://192.168.1.201/" "Chrome/15.0.874.106" "-"

PV很简单,大致就是统计某个URL的访问次数,例如统计/index.html的访问次数

Shell代码 复制代码 收藏代码
  1. grep"/index.html"/var/log/nginx/access.log–c
grep "/index.html" /var/log/nginx/access.log –c

UV呢,我们根据用户标识(第四列) ,首先需要字符串截取,使用cut命令,以空格符号分割,-d “ ”, 再取第四列-f 4,然后这里需要排重,需要使用uniq工具,uniq速度很快,但是基于就近排重,前一个后一个一样会排重,之间间隔了不一样的,就不行了,这就必须使用sort工具来对标识符进行排序,排序后再使用uniq工具就可以达到目的,之间我们用管道符号链接, 最后再用 wc –l 输出统计数

比如我们统计访问了/index.html这也页面的uv:

Shell代码 复制代码 收藏代码
  1. grep"/index.html"/var/log/nginx/access.log|cut–d“”–f4|sort|uniq|wc–l
grep "/index.html" /var/log/nginx/access.log | cut –d “ ” –f 4| sort | uniq | wc –l

独立IP:

假设我们要统计整站的独立IP,那么我们不需要使用 grep来匹配具体页面,只需要使用cat输出即可:

Shell代码 复制代码 收藏代码
  1. cat/var/log/nginx/access.log|cut–d“”–f1|sort|uniq|wc-l
cat /var/log/nginx/access.log | cut –d “ ” –f 1 | sort| uniq | wc -l

都木有使用强大的awk,就完成了基本的统计需求:)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值