從你的句子我需要檢查,如果該序列匹配任何與第二序列據我瞭解,你要檢查是否任何線路中的兩個文件是否匹配?
如果您需要多次讀取文件,那麼您可以使用seek
回退到開始而不重新打開它。
這個程序顯示了這個想法。
use strict;
use warnings;
open my $fh1, '<', 'file1' or die $!;
open my $fh2, '<', 'file2' or die $!;
open my $out, '>', 'matches' or die $!;
while (my $line1 = <$fh1>) {
seek $fh2, 0, 0;
while (my $line2 = <$fh2>) {
if ($line1 eq $line2) {
print $out $line1;
last;
}
}
}
編輯
您的評論已改變的問題。這兩個文件都有四行記錄,您想比較兩個文件中相應記錄的第二行。
use strict;
use warnings;
open my $fh1, '<', 'file1' or die $!;
open my $fh2, '<', 'file2' or die $!;
open my $match, '>', 'matches' or die $!;
open my $nomatch, '>', 'nomatch' or die $!;
while (1) {
my (@data1, @data2);
for (1 .. 4) {
my $line;
$line = <$fh1>;
push @data1, $line if defined $line;
$line = <$fh2>;
push @data2, $line if defined $line;
}
last unless @data1 == 4 and @data2 == 4;
if ($data1[1] eq $data2[1]) {
print $match @data2;
}
else {
print $nomatch @data2;
}
}
我是否正確理解只有具有相同編號的行才能匹配所有文件? –
什麼是內循環?這裏沒有內部循環afaics。 – Qtax
你能解釋一下你的目標是什麼......你想比較這些文件嗎? – dgw