免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: hkldd
打印 上一主题 下一主题

求助:用Perl统计重复行次数并排序(千万级行数)的代码 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-01-11 12:39 |只看该作者
如果数据的重复程度低,机器配置又不行,那上面的代码跑起来效率就不会高。

论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
12 [报告]
发表于 2013-01-11 17:35 |只看该作者
这么大的数据量, 我觉得搞个数据库好些, 否则内存是个大问题.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
13 [报告]
发表于 2013-01-13 01:01 |只看该作者
文件太大读入时间太久,想把数据精减成这样后再试,请大家把代码改一下好吗?
       识别编码
11 23 55 73 89 82   
13 33 58 73 82 89
13 33 58 73 82 89  
13 33 58 73 82 89   
15 36 68 79 85 99  
01 12 23 24 55 68  
03 05 11 23 45 89
11 23 55 73 89 82
15 36 68 79 85 99
15 36 68 79 85 99   
07 10 11 17 56 89   
11 23 55 73 89 82   
15 36 68 79 85 99   
16 19 28 35 65 79   
15 36 68 79 85 99   
11 23 55 73 89 82   
16 19 28 35 65 79   
11 23 55 73 89 82  
32 55 67 68 78 79   
32 55 67 68 78 79   
22 25 27 36 49 78   
22 25 27 36 49 78  
22 25 27 36 49 78   
22 25 27 36 49 78   
  ·
  ·
  ·
  ·

期望得到的运行结果(sp2的累计次数排序式样)

          识别编码        call(次)
   11 23 55 73 89 82     5
   15 36 68 79 85 99     5
   22 25 27 36 49 78     4
   13 33 58 73 82 89     3
   16 19 28 35 65 79     2
   32 55 67 68 78 79     2
   01 12 23 24 55 68     1
   03 05 11 23 45 89     1
   07 10 11 17 56 89     1

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
14 [报告]
发表于 2013-01-13 23:07 |只看该作者
mcshell大侠想请你帮忙修改一下你写的这个代码好吗?
#!/usr/bin/perl
use strict;
use warnings;
use Data:umper;
my %hash;
open FA,"sp1" or die "$!";
while(<FA>{
    /((?:\s\d{2}){6})(?{$hash{$1}++})/;
}
close FA;
open FB,">sp2" or die "$!";
print FB "$_\t$hash{$_}\n" for (sort{$hash{$b} <=> $hash{$a}}keys %hash);
close FB;

    现在遇到的情况是;文件中识别编码前必须留空格才能运行岀来统计次数,去掉空格运行
不岀来数据,想请你帮忙修改一下你写的代码,使识别编码前不留空格也可以运行,好吗?谢谢!

论坛徽章:
0
15 [报告]
发表于 2013-01-14 08:41 |只看该作者
hkldd 发表于 2013-01-13 23:07
mcshell大侠想请你帮忙修改一下你写的这个代码好吗?
#!/usr/bin/perl
use strict;


什么意思? 去掉\s?

论坛徽章:
0
16 [报告]
发表于 2013-01-14 08:42 |只看该作者
hkldd 发表于 2013-01-13 23:07
mcshell大侠想请你帮忙修改一下你写的这个代码好吗?
#!/usr/bin/perl
use strict;


什么意思? 去掉\s?

论坛徽章:
0
17 [报告]
发表于 2013-01-14 08:42 |只看该作者
/((?:\s\d{2}){6})(?{$hash{$1}++})/; 改成 /((?:\d{2}){6})(?{$hash{$1}++})/; 你是这个意思么?

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34子鼠
日期:2013-12-14 14:57:19射手座
日期:2014-04-25 21:23:23
18 [报告]
发表于 2013-01-14 09:09 |只看该作者
  1. /((?:\s*\d{2}){6})(?{$hash{$1}++})/
复制代码
回复 14# hkldd


    这样就好。。。
不过数据量太大。。就想LS几位说的。。效率不是很高。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
19 [报告]
发表于 2013-01-14 09:11 |只看该作者
本帖最后由 hkldd 于 2013-02-21 15:26 编辑

    真诚的谢谢你mcshell大侠 ,你写的代码我在5.16.2上运行通过了,由于文件太大了用了将近10分钟左右完成,总算是解决了大问题,谢谢你!


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP