免费注册 查看新帖 |

Chinaunix

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

使用perl 统计相关问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-11 17:21 |只看该作者 |倒序浏览
[2012-07-11 15:49:28] thread:2144002 src:a
[2012-07-11 15:49:28] thread:2144002 src:b
[2012-07-11 15:49:28] thread:2144002 src:c
[2012-07-11 15:49:28] thread:2144002 src:a
[2012-07-11 16:42:02] thread:2144002 src:a

我想统计每小时,src 后面的数字有多少。求助各路高人
最终实现如
time   a   b   c
15      2   1   1
16     1    0   0

论坛徽章:
0
2 [报告]
发表于 2012-07-11 17:46 |只看该作者
本帖最后由 kk861123 于 2012-07-12 08:34 编辑
  1. #!/usr/bin/perl -w
  2. use strict;
  3. my %hour_of;
  4. my %src;
  5. while (<DATA>) {
  6.     if (m{^\[\S+\s+(\d+):.*\]\s+\S+\s+src:(.)$}) {
  7.         $hour_of{$1}{$2}++;
  8.         $src{$2}++;
  9.     }
  10. }

  11. print join("\t",'time'
  12.                ,sort keys %src )
  13.                ,"\n";
  14. for my $h (sort keys %hour_of) {
  15.     print join("\t",$h
  16.                    ,map { $hour_of{$h}->{$_} || 0 } sort keys %src )
  17.                    ,"\n";
  18. }

  19. __DATA__
  20. [2012-07-11 15:49:28] thread:2144002 src:a
  21. [2012-07-11 15:49:28] thread:2144002 src:b
  22. [2012-07-11 15:49:28] thread:2144002 src:c
  23. [2012-07-11 15:49:28] thread:2144002 src:a
  24. [2012-07-11 16:42:02] thread:2144002 src:a
复制代码

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
3 [报告]
发表于 2012-07-11 17:49 |只看该作者
本帖最后由 cdtits 于 2012-07-11 19:27 编辑
  1. #!/usr/bin/env perl

  2. use List::MoreUtils qw(uniq);

  3. do { if (/^\[\S+ (\d+):\d+:\d+\] \w+:\d+ src:(\w+)$/) { $tmp{$1}->{$2}++; } } for (<DATA>);
  4. @keys = map { keys %{$_} } values %tmp;
  5. @keys = sort(uniq(@keys));
  6. print "time\t", join("\t", @keys), "\n";
  7. for $k (sort keys %tmp) {
  8.     print "$k\t", join("\t", map { ${$tmp{$k}}{$_} || 0; } @keys), "\n";
  9. }

  10. __DATA__
  11. [2012-07-11 15:49:28] thread:2144002 src:a
  12. [2012-07-11 15:49:28] thread:2144002 src:b
  13. [2012-07-11 15:49:28] thread:2144002 src:c
  14. [2012-07-11 15:49:28] thread:2144002 src:a
  15. [2012-07-11 16:42:02] thread:2144002 src:a
复制代码

论坛徽章:
0
4 [报告]
发表于 2012-07-11 18:14 |只看该作者
回复 2# kk861123

你好,我的最终实现如下。15点 a 出现了几次,b出现了几次,c出现了几次
time   a   b   c
15      2   1   1
16     1    0   0

论坛徽章:
0
5 [报告]
发表于 2012-07-11 18:31 |只看该作者
  1. #!/usr/bin/perl -w

  2. use warnings;
  3. my %time;
  4. while(<DATA>){
  5.         if(/\[\d*\-\d*\-\d*\s+(\d*)\:\d*\:\d*\]\s\w*\:\d*\s\w*\:(\w)/){
  6.                 $time{$1}->{$2}++;
  7.         }
  8. }

  9. print "Time\ta\tb\tc\n";
  10. print $_."\t".($time{$_}{'a'}||0)."\t".($time{$_}{'b'}||0)."\t".($time{$_}{'c'}||0)."\n" for sort(keys %time);

  11. __DATA__
  12. [2012-07-11 15:49:28] thread:2144002 src:a
  13. [2012-07-11 15:49:28] thread:2144002 src:b
  14. [2012-07-11 15:49:28] thread:2144002 src:c
  15. [2012-07-11 15:49:28] thread:2144002 src:a
  16. [2012-07-11 16:42:02] thread:2144002 src:a
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-07-11 23:38 |只看该作者
谢谢你们,用你们的方法都得到了解决。

论坛徽章:
0
7 [报告]
发表于 2012-07-12 08:35 |只看该作者
本帖最后由 kk861123 于 2012-07-12 08:35 编辑

回复 4# xiaoao7678


    sorry,少了一个sort在line17,已修改。

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
8 [报告]
发表于 2012-07-12 09:20 |只看该作者
嗯。。嗯。。
非常感谢!各路高人谢谢你们,

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
9 [报告]
发表于 2012-10-17 09:10 |只看该作者
我的最终实现如下:
  1. #!perl

  2. use 5.016;
  3. my ( %h, %k );
  4. /\s(\d+).*(\w+)(?{$h{$1}{$2}++})/ while <DATA>;
  5. my @k = sort grep { !$k{$_}++ } map { keys $_ } values %h;
  6. say join "\t", 'time', @k;
  7. for my $t ( sort keys %h ) {
  8.     say join "\t", $t, map { $h{$t}{$_} // 0 } @k;
  9. }
复制代码

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
10 [报告]
发表于 2012-10-17 09:44 |只看该作者
我以为正常人会把时间表示成对象,然后想统计什么统计什么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP