以下のPerlコードの場合、入力ファイル(数百万行のデータを含む)の処理に数時間かかるため、効率を上げる必要があります。どうすればスピードアップできるかについてのアイデアはありますか?
2つのファイルがある場合、データを比較して、一致する行と一致しない行を出力します。2つの列を同じ意味で比較する必要があることに注意してください。
例えば、
input1.txt
A B
C D
input2.txt
B A
C D
E F
G H
注意:1行目と2行目は(互換的に)一致しています。3行目と4行目が一致していません
Output:
B A match
C D match
E F don't match
G H don't match
Perlコード:
#!/usr/bin/perl -w
use strict;
use warnings;
open INFH1, "<input1.txt" || die "Error\n";
open INFH2, "<input2.txt" || die "Error\n";
chomp (my @array=<INFH2>);
while (<INFH1>)
{
my @values = split;
next if grep /\D/, @values or @values != 2;
my $re = qr/\A$values[0]\s+$values[1]\z|\A$values[1]\s+$values[0]\z/;
foreach my $temp (@array)
{
chomp $_;
print "$_\n" if grep $_ =~ $re, $temp;
}
}
close INFH1;
close INFH2;
1;
このコードの効率を上げる方法についてのアイデアは高く評価されています。ありがとう!