免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5721 | 回复: 16
打印 上一主题 下一主题

经典pv统计问题的脚本求教,也许早有了,请教! [复制链接]

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-04-02 09:32:18
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-14 17:43 |只看该作者 |倒序浏览
原始日志格式文本如下:
#cat a.lst

10.10.1.1        http://www.hao.com/1.html
10.10.1.2        http://www.hao.com/2.html
10.10.1.3        http://www.hao.com/3.html
10.10.1.4        http://www.hao.com/4.html
10.10.1.2        http://www.hao.com/1.html
10.10.1.1        http://www.hao.com/1.html
10.10.1.1        http://www.hao.com/2.html
10.10.1.2        http://www.hao.com/3.html
10.10.1.1        http://www.hao.com/1.html
10.10.1.3        http://www.hao.com/2.html

求教一shell脚本或perl脚本处理后生成如下报表:

url                                        独立ip                  pv
--------------------------------------------------------------------
http://www.hao.com/1.html        2                4
http://www.hao.com/2.html        3                3
http://www.hao.com/3.html        2                2
http://www.hao.com/4.html        1                1


总结:即通过url计算每个url的独立ip数和pv数,并可按pv数或者独立ip数量进行排序。

论坛徽章:
0
2 [报告]
发表于 2010-05-14 18:04 |只看该作者
  1. awk '{if($2 in a){split(a[$2],c," "); c[2]++;if(!match(b[$2],$1)) {c[1]++;b[$2]=b[$2]" "$1;} a[$2]=c[1]" "c[2];} else {a[$2]="1 1";b[$2]=$1}} END{for(i in a)print i,a[i]}' file
复制代码

论坛徽章:
0
3 [报告]
发表于 2010-05-14 18:24 |只看该作者

  1. awk '{a[$2]++;if(!b[$2"_"$1]){b[$2"_"$1]=1;n[$2]++}}END{for(i in a) print i,n[i],a[i]}' URFILE | sort -k3n

  2. # 前面两行在前面直接输出就行了
  3. # 排序用sort处理即可,按独立IP数是-k2n,按pv值是-k3n,如果倒序排就加个r
复制代码

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2010-05-14 18:41 |只看该作者

  1. awk '!($0 in a){a[$0];a[$2]++}{b[$2]++}END{for(i in b)print i,a[i],b[i]}' urfile | sort
复制代码

论坛徽章:
0
5 [报告]
发表于 2010-05-15 00:42 |只看该作者

  1. awk '{if(!a[$1,$2]++)b[$2]++;c[$2]++}END{for(i in b)print i,b[i],c[i]}' urfile |sort
复制代码

论坛徽章:
1
2015年亚洲杯之巴林
日期:2015-04-02 09:32:18
6 [报告]
发表于 2010-05-15 16:39 |只看该作者
非常感谢楼上各位老大。{:3_200:}

论坛徽章:
0
7 [报告]
发表于 2010-05-16 09:24 |只看该作者
回复 4# Shell_HAT


    写的真好~同样一个需求,用最简洁的代码实现。这个思路我觉得应该是相对而言非常简洁了~佩服

论坛徽章:
1
水瓶座
日期:2013-11-04 13:16:13
8 [报告]
发表于 2010-05-16 18:15 |只看该作者
回复 2# lkk2003rty
翻译下:
awk '{if($2 in a){split(a[$2],c," "); c[2]++;if(!match(b[$2],$1)) {c[1]++;b[$2]=b[$2]" "$1;} a[$2]=c[1]" "c[2];} else {a[$2]="1 1";b[$2]=$1}} END{for(i in a)print i,a}' file

1.先定义个数组a[$2]=“1 1”“1  1”分别代表独立ip个数 和pv值       b[$2]=$1
2.如果网址在数组a里面,将数a[$2]切分分成数组c  c[2]++ 递增,如果这行的ip不重复,c[1]++递增 b[$2] 变成b[url]=url+ip然后a[$2]重新赋值
3.最后遍历

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
9 [报告]
发表于 2010-05-17 10:18 |只看该作者
留个记号看先学习了哦

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
10 [报告]
发表于 2010-05-17 12:18 |只看该作者
回复 4# Shell_HAT


    !($0 in a)

什么意思呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP