免费注册 查看新帖 |

Chinaunix

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

perl求教:根据key值计算两个文本文件的匹配件数 [复制链接]

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
11 [报告]
发表于 2014-01-14 13:16 |只看该作者
回复 2# rubyish

不好意思,这位高手。
我运行你这个程序,输出结果始终是0。

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
12 [报告]
发表于 2014-01-14 15:19 |只看该作者
回复 10# robinhappiness
try:
  1. open F1, "a" or die;
  2. open F2, "b" or die;
  3. my ( %h1, %h2, $n );
  4. map { chomp; $h1{(split /,/)[2]} ++ } <F1>;
  5. map { my $t = (split /[,@]/)[1]; ! $h2{$t} ++ && $h1{$t} && $n ++ } <F2>;
  6. print "$n$/";
复制代码

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
13 [报告]
发表于 2014-01-14 16:26 |只看该作者
  1. #!/usr/bin/perl
  2. my ( %h, $sum );
  3. while (<DATA>) {
  4.     my @a = split /,|@|\s+/;
  5.     @a == 3
  6.       ? ( $h{ $a[2] } = 1 )
  7.       : $h{ $a[2] } && $h{ $a[2] }++ == 1 && $sum++;
  8. }

  9. print "The sum is $sum\n";

  10. __DATA__
  11. 5a17b,123,a
  12. 5a17b,123,a
  13. 5a17b,123,c
  14. 5a17b,123,d
  15. 5a17b,123,e
  16. 5a17b,123,f
  17. 5a17b,123,g
  18. 5a17b,123,h
  19. 2013-11-01 00:02:26,a@baidu.com
  20. 2013-11-01 00:02:26,weer323eow@baidu.com
  21. 2013-11-01 00:02:26,asd534ewwe@baidu.com
  22. 2013-11-01 00:02:26,c@baidu.com
  23. 2013-11-01 00:02:26,m323_nopqr@baidu.com
  24. 2013-11-01 00:02:26,d@baidu.com
  25. 2013-11-01 00:02:26,w5eweorgo@baidu.com
  26. 2013-11-01 00:02:26,a@baidu.com
  27. 2013-11-01 00:02:26,a@baidu.com
  28. 2013-11-01 00:02:26,m323_nopqr@baidu.com
复制代码

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
14 [报告]
发表于 2014-01-14 17:42 |只看该作者
回复 12# yestreenstars

请教高手,我执行你的这个程序,最后得到aaa.txt中ID列和bbb.txt中每行第一个逗号和@之前的值相等的行数是4,
而实际上aaa.txt中的ID列有两个a值,所以应该只算一次,再加上ID列的c 和d,与bbb.txt中的,和@之间的值一样,所以符合条件的应该是3条记录。
请高手能帮忙看一下吗?
-------------------------------
    aaa.txt
#aaaa,#bbbb,#ID
5a17b,123,a
5a17b,123,a
5a17b,123,c
5a17b,123,d
5a17b,123,e
5a17b,123,f
5a17b,123,g
5a17b,123,h

bbb.txt
2013-11-01 00:02:26,a@baidu.com
2013-11-01 00:02:26,weer323eow@baidu.com
2013-11-01 00:02:26,asd534ewwe@baidu.com
2013-11-01 00:02:26,c@baidu.com
2013-11-01 00:02:26,m323_nopqr@baidu.com
2013-11-01 00:02:26,d@baidu.com
2013-11-01 00:02:26,w5eweorgo@baidu.com

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
15 [报告]
发表于 2014-01-14 18:42 |只看该作者
回复 14# robinhappiness
  1. $ head a b
  2. ==> a <==
  3. #aaaa,#bbbb,#ID
  4. 5a17b,123,a
  5. 5a17b,123,a
  6. 5a17b,123,c
  7. 5a17b,123,d
  8. 5a17b,123,e
  9. 5a17b,123,f
  10. 5a17b,123,g
  11. 5a17b,123,h

  12. ==> b <==
  13. 2013-11-01 00:02:26,a@baidu.com
  14. 2013-11-01 00:02:26,weer323eow@baidu.com
  15. 2013-11-01 00:02:26,asd534ewwe@baidu.com
  16. 2013-11-01 00:02:26,c@baidu.com
  17. 2013-11-01 00:02:26,m323_nopqr@baidu.com
  18. 2013-11-01 00:02:26,d@baidu.com
  19. 2013-11-01 00:02:26,w5eweorgo@baidu.com

  20. $ cat p
  21. #!perl
  22. use warnings;
  23. use strict;
  24. use 5.010;
  25. open F1, "a" or die;
  26. open F2, "b" or die;
  27. my ( %h1, %h2, $n );
  28. map { chomp; $h1{(split /,/)[2]} ++ } <F1>;
  29. map { my $t = (split /[,@]/)[1]; ! $h2{$t} ++ && $h1{$t} && $n ++ } <F2>;
  30. print "$n$/";

  31. $ ./p
  32. 3

  33. $
复制代码

论坛徽章:
4
程序设计版块每日发帖之星
日期:2015-10-10 06:20:00每日论坛发贴之星
日期:2015-10-10 06:20:00程序设计版块每日发帖之星
日期:2015-10-11 06:20:00程序设计版块每日发帖之星
日期:2015-10-25 06:20:00
16 [报告]
发表于 2014-01-14 22:22 |只看该作者
回复 15# yestreenstars


    我要发疯了,程序一模一样,只是我的perl版本是5.8.8
我运行的结果却是4,到底是哪块儿的问题呢?郁闷ing
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP