perl匹配来自不同表的两列

时间:2015-05-11 12:34:55

标签: perl

我有一个这样的表有3列,名为table1

1       2       A
2       3       B
4       5       D

我有另一个包含一列的表,名为table2,看起来像这样

A
B
E
F

如果table1和table1的第三列之间存在匹配,我想将匹配行原样打印到名为output的新表中,在这种情况下应该看起来像这样

1    2    A
2    3    B

我在Perl中写作并认为我应该使用哈希来做这件事。所以我尝试了以下

#!/usr/bin/perl
use strict;
use warnings;

open(my $table1,'<',"table1.txt");
open(my $table2,'<',"table2.txt");
open(my $output,'+>',"output.txt");

my %hash = ();

while (<$table2>){
    chomp;
    my $keyfield = $_;
    push @{$hash{keyfield}};
}
seek $table1,0,0;
while (<$table1>){
     chomp;
     my @cols = split(/\t/);
     my $keyfield = $cols[2];
     if (exists($hash{$keyfield})) {
        print $output $_, "\n";
 }
 }

此方法之前有效,但现在我不得不稍微修改它。我收到警告:在第13行没有使用push的无用(这是我推送的行)。我的输出是空的。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

您需要使用$hash{$keyfield} = 1来创建关联,而不是push

tip from @Sobrique,您还可以使用$hash{$keyfield}++,以便稍后确定密钥是否存在,并为您提供一些事件。

相关问题