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