你如何匹配两个文件中的字符串

时间:2014-04-22 15:36:25

标签: string perl match two-columns

编译此Perl代码时,我总是收到此错误"Use of uninitialized value $_ in print at finalhash.pl line 27, <$_[...]> line 7"。但我的示例文件没有第7行。

如果第一列中的字符串与file1.txt第二列中的字符串匹配,我想打印出整行的file2.txt行。

列用分号分隔。

此代码改编自我之前发布的问题的另一个答案(感谢Borodin)。有人能告诉我为什么在第一个while循环中第二列被赋予值1:"$wanted{$fields[1]} = 1;"

use strict;
use warnings;
use autodie;

my $fh;
my %wanted;

open $fh, '<', 'file1.txt';
chomp $fh;
while (my $line = <$fh>) {

    my @fields = split(';', $line);

    $wanted{$fields[1]} = 1;

}


open $fh, '<', 'file2.txt';
chomp $fh;
while (my $line = <$fh>) {

my @fields = split(';', $line);

   print if $wanted{$fields[0]};  #line 27 with the error


}

close $fh;

1 个答案:

答案 0 :(得分:1)

open $fh, '<', 'file1.txt';
#chomp $fh;
while (my $line = <$fh>) {
    chomp $line;


open $fh, '<', 'file2.txt';
#chomp $fh;
while (my $line = <$fh>) {

通过这些更改,您的脚本应该可以正常运行。在第一个文件阅读中,你没有“扼杀”。 $线。 chomp $ fh毫无意义 - 什么都不做。

无需删除文件2中的换行符,因为您只是稍后将其打印出来。

更新:Matt在上面的评论中遇到了问题。打印$ line if ...