簡體   English   中英

比較Perl中的兩個文本文件

[英]Compare two text files in Perl

我在兩個.txt文件中有幾個字符串。 他們兩個都包含一些相似的字符串,但是沒有排列在相同的行號上。

例如,file1.txt Carmen Edison Molly Jason Damon Gerard

file2.txt愛迪生傑森

我想將兩個文本文件(在本例中為Edison Jason)中找到的相似字符串保存到數組中。

有各種各樣的數組實用程序庫可以實現這一目的-您的目標尤其是交集,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";

無需使用其他模塊

#!/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;
        }
    }
}

您可以通過這種方式進行操作而無需安裝任何其他模塊

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

my (@file1,@file2,@match);

open FILE1, "<", 'file1.txt';
@file1 = <FILE1>;
close FILE1;

open FILE2, "<", 'file2.txt';
@file2 = <FILE2>;
close FILE2;

chomp (@file1,@file2);

foreach(@file1) {
    if ($_ ~~ @file2) {
        push @match, $_;
    }
}

print "\nMatches\n";
foreach(@match) { print "The same -- $_\n"; }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM