从你的句子中,我需要检查序列是否与我收集到的第二个序列中的序列匹配,你想检查两个文件中的任何行是否匹配?
如果您需要多次阅读一个文件,那么您可以使用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;
}
}