免费注册 查看新帖 |

Chinaunix

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

新人求解 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-09-16 14:04 |只看该作者 |倒序浏览
各位大侠,最近刚开始学习perl,现遇到一个问题,关于文件合并的,虽然论坛里有好多这种问题,但我还是想求解一下自己的问题,拜托了……
我有两个文本,第一个为new1.txt:
SH    AA    XX
GZ    BB    YY
SZ    CC    ZZ
BJ     DD   WW
第二个为new2.txt
TJ    BB     OO
HN   CC     PP
HB   EE     QQ
HN   FF      RR
我想根据第二列中两个文本中共同的挑出来,输出到新的文本new.txt里,结果如下:
GZ    BB    YY
SZ    CC    ZZ
TJ    BB     OO
HN   CC     PP
不知道该咋实现,求各位大神不吝赐教

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2013-09-16 14:26 |只看该作者
回复 1# codeternity


    perl -anle 'print $hash{$F[1]}->[1],"\n",$_ if ++$hash{$F[1]}->[0] == 2; $hash{$F[1]}->[1]=$_;' file1 file2

论坛徽章:
0
3 [报告]
发表于 2013-09-16 14:28 |只看该作者
回复 2# yinyuemi
大神,这个有点看不懂……


   

论坛徽章:
6
丑牛
日期:2014-03-21 15:42:04子鼠
日期:2014-04-12 11:50:17处女座
日期:2014-09-01 09:25:1115-16赛季CBA联赛之吉林
日期:2015-12-22 14:01:5215-16赛季CBA联赛之广东
日期:2016-03-08 18:49:422016科比退役纪念章
日期:2016-07-06 12:19:55
4 [报告]
发表于 2013-09-16 14:31 |只看该作者
第一感觉用shell快点。。。{:3_188:}
  1. egrep -f new1.txt new2.txt > new.txt
复制代码

论坛徽章:
0
5 [报告]
发表于 2013-09-16 14:37 |只看该作者
回复 4# stanley_tam
大侠,我这个perl还没搞明白,您这个shell我恐怕又得……


   

论坛徽章:
0
6 [报告]
发表于 2013-09-16 14:57 |只看该作者
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my %hash;
  5. open FH1, "<", "new1.txt" or die $!;
  6. open FH2, "<", "new2.txt" or die $!;
  7. while (<FH1>)
  8. {
  9.         chomp;
  10.         my $key = (split /\s+/)[1];
  11.         $hash{$key} = $_;
  12. }

  13. while (<FH2>)
  14. {
  15.         chomp;
  16.         my $key = (split /\s+/)[1];
  17.         if (exists $hash{$key})
  18.         {
  19.                 print qq/$hash{$key}\n/;
  20.                 print qq/$_\n/;
  21.         }
  22. }

  23. close FH2;
  24. close FH1;
复制代码
这个应该好理解了吧

论坛徽章:
0
7 [报告]
发表于 2013-09-16 15:12 |只看该作者
  1. perl -ape '$c{$F[1]}?($a.=$c{$F[1]})&&($b.=$_):($c{$F[1]}=$_)}{$_=$a.$b' new1.txt new2.txt > new.txt
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2013-09-16 17:03 |只看该作者
回复 3# codeternity
  1. #!/usr/bin/perl

  2. use strict;

  3. my %hash;


  4. open(f1,"file1") or die "$!\n";
  5. open(f2,"file2") or die "$!\n";

  6. while(<f1>){
  7.     my $data = split;
  8.     $hash{$data[1]}->[0]++;     
  9.     $hash{$data[1]}->[1] = $_;  
  10. }

  11. # the value of %hash is the ref of array, [counts of column2, data of one line];

  12. while(<f2>){
  13.     $hash{$data[1]}->[0]++;
  14.     if($hash{$data[1]} == 2){
  15.         print $hash{$data[1]}->[1],$_;
  16.     }
  17. }

  18. close(f1);
  19. close(f2);
复制代码

论坛徽章:
0
9 [报告]
发表于 2013-09-16 18:41 |只看该作者
回复 7# cinanine


这个是不是写了一部分啊

论坛徽章:
3
摩羯座
日期:2013-09-04 12:01:36申猴
日期:2013-10-23 12:12:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34
10 [报告]
发表于 2013-09-16 21:23 |只看该作者
回复 7# cinanine


    灌个水!
每次看到你的头像我就想歪了!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP