比较Perl中的两个文本文件

时间:2015-04-29 03:07:54

标签: arrays string perl file text

我在两个.txt文件中有几个字符串。它们都包含一些类似的字符串,但没有排列在同一行号上。

例如, FILE1.TXT 卡门 爱迪生 莫莉 贾森 达蒙 杰拉德

FILE2.TXT 爱迪生 杰森

我想将两个文本文件(在本例中为Edison Jason)中找到的类似字符串保存到数组中。

2 个答案:

答案 0 :(得分:2)

有各种各样的数组实用程序库可以实现这一点 - 你的具体交集之后,Array :: Utils是实现这一目标的更简单的库之一;

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

use File::Slurp qw(read_file);
use Array::Utils qw(intersect);

my $file1 = 'file1.txt';
my $file2 = 'file2.txt';

my @data1 = split( /\s/, read_file($file1) );
my @data2 = split( /\s/, read_file($file2) );

my @intersect = intersect( @data1, @data2 );

print join(', ', @intersect), "\n";

或者,不需要Array :: Utils

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

my @data1 = qw( Carmen Edison Molly Jason Damon Gerard );
my @data2 = qw( Edison Jason );

sub intersect {
  my %e = map { $_ => undef } @{$_[0]};
  return grep { exists( $e{$_} ) } @{$_[1]};
}

my @intersect = intersect( \@data1, \@data2 );
print join(', ', @intersect), "\n";

答案 1 :(得分:0)

无需使用其他模块

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

my @data1 = qw( Carmen Edison Molly Jason Damon Gerard );
my @data2 = qw( Edison Jason );
my @data3 = ();

foreach my $d1 ( @data1 )
{
    chomp $d1;

    foreach my $d2 ( @data2 )
    {
        chomp $d2;

        if( $d1 eq $d2 )
        {
            print "Match Found : $d1, $d2 \n";
            push @data3, $d1;
        }
    }
}