#!/usr/bin/perl use strict; use warnings; my $qfn1 = "File1.txt"; my $qfn2 = "File2.txt"; my %positions; { open(my $fh, '<', $qfn1) or die("Cannot open file \"$qfn1\": $!\n"); while (<$fh>) { my ($key, $pos) = split /\s+/; $positions{$key} = $pos; } } { open(my $fh, '<', $qfn2) or die("Cannot open file \"$qfn2\": $!\n"); for (;;) { defined( my $key = <$fh> ) or last; defined( my $text = <$fh> ) or last; chomp($key); chomp($text); $key = (split(/\|/,$key,3))[1]; defined( my $pos = $positions{$key} ) or next; my $index = rindex($text, "FAN", $pos); next if ( $index < 0 ); $index += 3 while ( ($index + 3) < $pos); print "$key $pos " . substr($text, $index, 3) . "\n"; } }