比较两个文件并显示匹配的结果

时间:2013-11-25 12:42:42

标签: perl

我有以下问题要解决...我有两个文件包含以下信息:

A.TXT

alan, 23, alan@yahoo.com
albert, 27, albert@yahoo.com

b.txt

alan:173:analyst
victor:149:director
albert:171:clerk
coste:27:driver

我需要从两个文件的每一行中提取名称(零字段),比较它们以及它们是否匹配,打印年龄和职业信息。 因此,我的输出应该是:

alan, 23, analyst
albert, 27, clerk

到目前为止我得到了什么,而且它不起作用:

open F2, 'a.txt' or die $!;
@interesting_lines = <F2>;

foreach $line (@interesting_lines ) {
    @string = split(', ', $line);
    print "$string[0]\n";
}
close F2;

open F1, 'b.txt' or die $!;
while (defined(my $line = <F1>)) {
    @string2 = split(':', $line);
    print $string2[0];
    print "$.:\t$string2[0]" if grep {$string2[0] eq $_} $string[0] ;
}

有没有人有任何想法如何实现我的要求?谢谢... Ps,bith文件可能有比我发布的更多的行,但文件b.txt将始终具有文件a.tx所具有的每个名称,以及额外的行。

1 个答案:

答案 0 :(得分:0)

open my $F2, '<', 'a.txt' or die $!;
chomp(my @interesting_lines = <$F2>);
close $F2;

my %dic;
foreach my $line (@interesting_lines) {
  my ($name, @arr) = split(/, /, $line);
  $dic{$name} = \@arr;
}

open my $F1, '<', 'b.txt' or die $!;

while (my $line = <$F1>) {
  chomp($line);
  my ($name, $pos) = ( split(/:/, $line) )[0, 2];

  my $arr = $dic{$name} or next;
  printf("%s, %s, %s, %s\n", $name, $arr->[0], $pos, $arr->[1]);
}
close $F1;