免费注册 查看新帖 |

Chinaunix

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

4个文件中寻找相同行 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-30 16:20 |显示全部楼层 |倒序浏览
有4个文件,每个都有15万行左右。每行长度在120个字母左右,要求找出4个文件中都出现过的行,打印出来。
每个文件中不会有重复的行。
下面是我的脚本,发现运行起来非常慢,每100行大约要4~5秒,到10万行时,每100行大约要执行10多秒。
想请位各位高手,有没有快速的方法?非常感谢~~
  1. use warnings;
  2. use strict;

  3. open my $f0, "<", "changes.tcl.core0" or die;
  4. open my $fo, ">", "changes.tcl.same" or die;

  5. `rm changes.tcl.same` if (-e "changes.tcl.same");

  6. my $cnt = 0;
  7. while ( <$f0> ) {
  8.     chomp;
  9.     my @a = `grep '$_' changes.tcl.core* -l`;
  10.     print $fo "$_\n" if @a==4;
  11.     print "cnt=$cnt\n" unless $cnt % 100;
  12.     $cnt = $cnt + 1;
  13. }
  14. print "Done!\n";
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-07-30 16:30 |显示全部楼层
dgtnk 发表于 2013-07-30 16:24
如果是我,我会遍历四个文件,每行作为hash的key,每行出现一次该key对应的value加1,最后输出value等于4的 ...


这样的话,需要把4个文件都同时吃进来,会不会更慢啊?

论坛徽章:
0
3 [报告]
发表于 2013-07-30 19:12 |显示全部楼层
非常感谢楼上各位大大的解答。

最后小弟还是采用了2楼大哥的方法,发现机器还是挺给力的。

论坛徽章:
0
4 [报告]
发表于 2013-07-30 22:14 |显示全部楼层
lhohoz 发表于 2013-07-30 21:44


多谢这位大哥。
个人认为,中间那部分得到4个数组的地方可以去掉,因为前提是不会有重复的行。

论坛徽章:
0
5 [报告]
发表于 2013-07-31 10:42 |显示全部楼层
rubyish 发表于 2013-07-30 23:30


高手!膜拜啊!
非常感谢~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP