免费注册 查看新帖 |

Chinaunix

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

关于从两个文件中提取需要的行,大家帮我看看为啥我的脚本执行效率超低 [复制链接]

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
21 [报告]
发表于 2010-05-23 12:19 |只看该作者
稍微改了一下,看楼主是不是能用。既然文件1的第1列有重复,那就把文件1第1列重复的都push进一个数组。
  1. use strict;
  2. my %file1;

  3. open my $fh1,"<","file1.txt" or die "Open file1.txt failed.\n";
  4. while (<$fh1>) {
  5.     chomp;
  6.     my @tmp = split /\s+/;
  7.     if (exists $file1{$tmp[0]}) {
  8.         push @{$file1{$tmp[0]}}, [@tmp[1..$#tmp]];
  9.     }else {
  10.         $file1{$tmp[0]} = [[@tmp[1..$#tmp]]];
  11.     }
  12. }
  13. close $fh1;

  14. open my $fh2,"<","file2.txt" or die "Open file2.txt failed.\n";
  15. open my $out,">","file3.txt" or die "Create file3.txt failed.\n";
  16. while (<$fh2>) {
  17.     chomp;
  18.     my @tmp = split /\s+/;
  19.     my $key = $tmp[1];
  20.     if (exists $file1{$key}) {
  21.         foreach my $line (@{$file1{$key}}) {
  22.             next if not ($line->[0] <= $tmp[8]
  23.                          and $line->[1] >= $tmp[9]);
  24.             my @str = ($key,@{$file1{$key}},@tmp[0,2..$#tmp],"\n");
  25.             print $out "@str";
  26.         }
  27.     }else {
  28.         next;
  29.     }
  30. }

  31. close $fh2;
  32. close $out;
复制代码

论坛徽章:
0
22 [报告]
发表于 2010-05-26 02:57 |只看该作者
后面使用哈希的几种算法,我试用了,可得到的输出非常奇怪,完全不是我要的数据,都是一些好像是内存地址的输出数据。恐怕代码本身有些问题,请楼上仔细检查过它们的输出结果再看看吧。

关于这个问题,我最后使用了拆分策略,先按照文件1第一列和文件2第二列的内容把两个文件分别拆分成许多小块,相同内容的放入同一目录,然后再在各个目录下执行两个文件的循环比对,只用控制文件1第二列第三列与文件2第九列第十列的相互关系。
按照以上思路,运算耗时减少近两千倍。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
23 [报告]
发表于 2012-11-18 19:39 |只看该作者
回复 10# wxlfh


    你的这个程序很怪异的不报错,但是又无输出,不知道是怎么回事啊!

论坛徽章:
1
未羊
日期:2014-09-08 22:47:27
24 [报告]
发表于 2012-11-19 07:16 |只看该作者
fly_in_thesky 发表于 2012-11-18 19:39
回复 10# wxlfh

我 21 楼的那个你看看行不行?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
25 [报告]
发表于 2012-11-21 11:05 |只看该作者
回复 24# wxlfh


    我试过了!无报错无输出!!不知什么原因!!

论坛徽章:
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
26 [报告]
发表于 2012-11-21 11:12 |只看该作者
穿越了吧,2010年的帖子
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP