Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2072447
  • 博文数量: 470
  • 博客积分: 10206
  • 博客等级: 上将
  • 技术积分: 5620
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-03 12:50
文章分类

全部博文(470)

文章存档

2012年(1)

2011年(18)

2010年(47)

2009年(404)

分类:

2009-06-04 08:51:18

[] [] [] [] []

侠客




CU编号: 630992
注册:2007-10-20
最后登录: 2009-06-03
帖子:
精华:0







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 17:19 
求助,想实现如下统计功能。
有个log,内容类似如下:
xxxxxxxx,resp,1001,xxxxxx,56:201,xxxx
xxxxxxxx,resp,1001,xxxxxx,56:202,xxxx
xxxxxxxx,resp,1001,xxxxxx,56:203,xxxx
......
......
xxxxxxxx,resp,1002,xxxxxx,56:201,xxxx
xxxxxxxx,resp,1002,xxxxxx,56:203,xxxx
xxxxxxxx,resp,1002,xxxxxx,56:206,xxxx
......
......
xxxxxxxx,resp,1007,xxxxxx,56:-13,xxxx
xxxxxxxx,resp,1008,xxxxxx,56:9001,xxxx
xxxxxxxx,resp,1009,xxxxxx,56:209,xxxx
......
......

xxxx,resp,[返回码1],xxxxxxx,56:[返回码2],xxxx
返回码1是全数字,返回码2会包含“-”号
返回码1和返回码2不固定,需要从日志中取,有多少种取多少种

想得到的结果是:
【1001】共计 条
【1001,201】共计 条
【1001,202】共计 条
......
......
【2001】共计 条
【2001,201】共计 条
【2001,-13】共计 条

......
......
可能几千个类似日志,共计百万条数据,所以还要考虑效率!
一向对awk数组比较恐惧,无解中,求高人相助。
感激不尽!

实际的一条log,log中还有大量其他不是这样格式的行
2009/05/31 21:34:59,InMsg,resp,1008,0,9990384585601,346156950,2343590548,0,999,0,0014,200,A Portal,212.230.144.69;QUsrPfRp,56:0,14:12923332326,16:00140055675190,22:1,15:2,121:20615;

[ 本帖最后由 zjdick 于 2009-6-1 18:08 编辑 ]



您对本贴的看法:
| | |

大天使



CU编号: 347943
注册:2005-12-11
最后登录: 2009-06-04
帖子:
精华:0







状态:...在线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 17:29 


CODE:
awk -F '[:,]' '{a[$3]++;b[$3"#"$6]++}END{for (i in a) {print i":"a[i];for (j in b) {split(j,M,"#");if (M[1]==i) print j":"b[j]}}}' file

改一下输出

CODE:
awk -F '[:,]' '{a[$3]++;b[$3","$6]++}END{for (i in a) {print "【"i"】共计"a[i];for (j in b) {split(j,M,",");if (M[1]==i) print "【"j"】共计"b[j]}}}' file

[ 本帖最后由 ywlscpl 于 2009-6-1 17:33 编辑 ]



您对本贴的看法:

__________________________________

shell新手&&awk新手
http://blog.chinaunix.net/u3/91453/


| | |

侠客




CU编号: 1650889
注册:2009-5-16
最后登录: 2009-06-03
帖子:
精华:0







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 17:49 
你的xxxxx里面包含:,数字字母么?



您对本贴的看法:
| | |

侠客




CU编号: 1650889
注册:2009-5-16
最后登录: 2009-06-03
帖子:
精华:0







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 18:03 


CODE:
time sed 's/^.*resp,\([0-9]*\).*56:\([0-9\-]*\).*$/[\1\t\2]/g' file |awk '{++S[$1];++M[$1","$2]}END{for (i in S) print i"]",S[i];for(j in M) print j,M[j]}'

[1007] 16074
[1008] 16074
[1009] 15510
[1001] 45402
[1002] 51042
[1002,203] 14946
[1001,201] 15510
[1001,202] 14946
[1001,203] 14946
[1002,206] 21432
[1009,209] 15510
[1007,-13] 16074
[1008,9001] 16074
[1002,201] 14664

real    0m5.573s
user    0m5.779s
sys     0m0.027s

14万条数据




您对本贴的看法:
| | |
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-04
帖子:
精华:0







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 18:07 
awk:

CODE:
awk -F '[,:]' '{a[$3","$6]++}END{for(i in a) print "["i"]:"a[i]}' urfile




您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥 (狼烟)
光明使者
八十万色狼总教头



CU编号: 547805
注册:2007-4-5
最后登录: 2009-06-03
帖子:
精华:0







来自:北京
状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 18:30 
把你后来添加的和前面的一起处理的。测试数据100W条。

CODE:
[root]# time awk -v RS="resp,|,56:" -F, 'BEGIN{getline} NR%2==0{s=$1;a[s]++} NR%2{a[s","$1]++} END{for(i in a) print "["i"] 共计 "a[i]" 条"}' b | sort | column -t
[1001,201]   共计  100001  条
[1001,202]   共计  100001  条
[1001,203]   共计  100001  条
[1001]       共计  300003  条
[1002,201]   共计  100001  条
[1002,203]   共计  100001  条
[1002,206]   共计  100001  条
[1002]       共计  300003  条
[1007,-13]   共计  100001  条
[1007]       共计  100001  条
[1008,0]     共计  100001  条
[1008,9001]  共计  100001  条
[1008]       共计  200002  条
[1009,209]   共计  100001  条
[1009]       共计  100001  条

real    0m10.996s
user    0m10.947s
sys     0m0.051s




您对本贴的看法:
| | |

侠客




CU编号: 630992
注册:2007-10-20
最后登录: 2009-06-03
帖子:
精华:0







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 22:27 
回复 #6 kwokcn 的帖子

没看懂,NR%2啥意思?



您对本贴的看法:
| | |
  帅哥 (狼烟)
光明使者
八十万色狼总教头



CU编号: 547805
注册:2007-4-5
最后登录: 2009-06-03
帖子:
精华:0







来自:北京
状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-1 22:47 
回复 #7 zjdick 的帖子

以"resp,"或",56:"作为换行符,半角逗号为分隔符,第一行无意义,其他的行,偶数行的第一个域是"resp,xxx"这里要获取的字符串,奇数行的第一个域是"56:xx"这里要获取的字符串。



您对本贴的看法:
| | |
  帅哥 (春之风)
大天使




CU编号: 110253
注册:2003-11-7
最后登录: 2009-06-04
帖子:
精华:







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-2 08:56 
用perl效率如何

CODE:
perl -ne '
/^.*?resp,(\d+).*?56:(-?\d+)/;
$a{$1}++;$b{$1}{$2}++;
END{
foreach $key (sort keys (%a)){
printf "【%s】共计 %d 条\n",$key,$a{$key};
foreach $skey (sort keys (%{$b{$key}})){
printf "【%s,%s】共计 %d 条\n",$key,$skey,$b{$key}{$skey};
}
}
}' 数据文件




您对本贴的看法:

__________________________________

Debian(lenny)
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
GNU Awk 3.1.5
GNU sed version 4.1.5
GNU grep 2.5.3
| | |
  帅哥 (春之风)
大天使




CU编号: 110253
注册:2003-11-7
最后登录: 2009-06-04
帖子:
精华:







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-2 09:09 


CODE:
time perl -ne '
/^.*?resp,(\d+).*?56:(-?\d+)/;                        
$a{$1}++;$b{$1}{$2}++;                                
END{                                                  
foreach $key (sort keys (%a)){                        
printf "【%s】共计 %d 条\n",$key,$a{$key};            
foreach $skey (sort keys (%{$b{$key}})){              
printf "【%s,%s】共计 %d 条\n",$key,$skey,$b{$key}{$skey};
}                                                         
}                                                         
}' 5                                                      
【1001】共计 450000 条                                    
【1001,201】共计 150000 条                                
【1001,202】共计 150000 条                                
【1001,203】共计 150000 条                                
【1002】共计 450000 条                                    
【1002,201】共计 150000 条                                
【1002,203】共计 150000 条
【1002,206】共计 150000 条
【1007】共计 150000 条
【1007,-13】共计 150000 条
【1008】共计 150000 条
【1008,9001】共计 150000 条
【1009】共计 150000 条
【1009,209】共计 150000 条

real    0m6.120s
user    0m6.000s
sys     0m0.108s

wc -l 5
1350000 5

因为数据是复制的,有重复,不知道实际情况会如何




您对本贴的看法:

__________________________________

Debian(lenny)
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)
GNU Awk 3.1.5
GNU sed version 4.1.5
GNU grep 2.5.3
| | |
[] [] [] [] []
  帅哥 (黑哥)
精灵使



CU编号: 631768
注册:2007-10-22
最后登录: 2009-06-04
帖子:
精华:0







状态:...离线...

[] [] [博客]


[] 顶部
发表于 2009-6-2 09:33 
回复 #10 springwind426 的帖子

Good! 向springwind426学习!



您对本贴的看法:

__________________________________

LIVE FREE OR DIE!     K.I.S.S.


| | |
  帅哥
光明使者




CU编号: 551382
注册:2007-4-13
最后登录: 2009-06-04
帖子:
精华:0







状态:...在线...

[] [] [博客]


[] 顶部
发表于 2009-6-2 09:42 


QUOTE:
原帖由 springwind426 于 2009-6-2 09:09 发表

time perl -ne '
/^.*?resp,(\d+).*?56:(-?\d+)/;                        
$a{$1}++;$b{$1}{$2}++;                                
END{                                                  
foreach  ...




您对本贴的看法:
| | |
阅读(778) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~