我建议通读 file1 构建每个标签在文件中出现位置的索引。可以从file2中读取所需数据的标签,并查阅索引以查看从何处读取相应信息。
这个程序显示了原理。目前尚不清楚如何区分标签和测试的其余部分。我假设它们都以 开头Index
,这可能是错误的,但如果您需要帮助以使其适应您的真实数据,请再次询问。
use strict;
use warnings;
@ARGV = qw/ file1.txt file2.txt / unless @ARGV;
my ($file1, $file2) = @ARGV;
my %index;
open my $f1, '<', $file1 or die qq(Unable to open "$file1": $!);
my $pos = tell $f1;
while (<$f1>) {
$index{$1} = $pos if /^(Index\S+)/;
$pos = tell $f1;
}
open my $f2, '<', $file2 or die qq(Unable to open "$file2": $!);
while (<$f2>) {
next unless /^(Index\S+)/ and defined($pos = $index{$1});
seek $f1, $pos, 0;
print scalar <$f1>, scalar <$f1>;
}
输出
Index1 annotation1
abcd
Index3 annotation3
hijk
Index5 annotation5
pqrs