use strict; use warnings; use Data::Dumper; open my $in1FH, q{<}, \ < ) { my( $key, $posn, $locn ) = split; $positions{ $key } = { position => $posn, location => $locn, }; } close $in1FH or die qq{close: < "File1.txt": $!\n}; print Data::Dumper->Dumpxs( [ \ %positions ], [ qw{ *positions } ] ); open my $in2FH, q{<}, \ <gi|155369268|ref|NM_001100917.1| After all AAACAATGTCGATTCTATGATGCGAACGCAGCATTTCAGGGACTGGATGAGGAGCTTACGGTTTTTTACT ACAGAATCATCAATATCTTGGAAGAAAAAGAATGTTAAGAAATAACAAAACAATAATTATTAAGTACTTT >gi|169212695|ref|XM_001716884.1| Its the code AGACAAGCTTGTCCTGATGTTCCTTGCCCTGGCAGATGTTCAGGACCTTCCTTTGATTCAACCCCTCCAC CTAAATGGCCCAAGCTTTCGGGGCTGTCATTGTCTGTTTGTCATTCAAGGGCCCAAGCTGAAGAGGGGGT >gi|175387629|ref|PM_001716884.1| Its the code again AGACAAGCTTGTCCTGATGTTCCTTGCCCTGGCAGATGTTCAGGACCTTCCTTTGATTCAACCCCTCCAC CTAAATGGCCCAAGCTTTCGGGGCTGTCATTGTCTGTTTGTCATTCAAGGGCCCAAGCTGAAGAGGGGGT AAGCTTTCTAAATGGCCCCGGGGCTTTGTCATTCAAGGGTGTGCCCAAGCCATTGTCTTGAAGAGGGGGT CGGGGCTTTTCAAGGGTCATTGTGCCCAAG >gi|192669295|ref|XM_001716884.1| Its the code AGACAAGCTTGTCCTGATGTTCCTTGCCCTGGCAGATGTTCAGGACCTTCCTTTGATTCAACCCCTCCAC CTAAATGGCCCAAGCTTTCGGGGCTGTCATTGTCTGTTTGTCATTCAAGGGCCCAAGCTGAAGAGGGGGT END_File2 # 1 2 3 4 5 6 7 #234567890123456789012345678901234567890123456789012345678901234567890 my $rsFile2out = \ do{ my $dummy }; open my $outFH, q{>}, $rsFile2out or die qq{open: > "File2out.txt": $!\n}; my $record = <$in2FH>; while( <$in2FH> ) { if( m{^>gi} ) { processRecord( $record ); $record = $_; } else { $record .= $_; } } processRecord( $record ); close $in2FH or die qq{close: < "File2.txt": $!\n}; close $outFH or die qq{close: > "File2out.txt": $!\n}; print ${ $rsFile2out }; sub processRecord { my $record = shift; my $key = ( split m{\|}, $record )[ 1 ]; if( exists $positions{ $key } ) { my( $header, @data ) = split m{\n}, $record; my $dataStr = join q{}, @data; substr $dataStr, $positions{ $key }->{ position } - 1, 1, $positions{ $key }->{ location }; print $outFH join qq{\n}, $header, unpack( q{(a70)*}, $dataStr ), q{}; } else { print $outFH $record; } return; }