use strict; use warnings; use Data::Dumper; use Fatal qw[open]; my %key; open my $data, '<', 'data.txt'; while(<$data>) { chomp; $key{$_} = []; } my %line; open my $all, '<', 'all.txt'; while(<$all>) { chomp; $line{key} = $_; $line{seq} = <$all>; # read the sequence chomp $line{seq}; my ($key) = ($line{key} =~ /(Contig\d*)/); if(exists $key{$key}) { push @{$key{$key}}, $line{seq}; } } print Dumper(\%key) ."\n"; #### $VAR1 = { 'Contig25396' => [ 'GGGATCTTTGGACGAAGGGGGGAAAAAGATGTCAACTTTAAGCATTCCAC CAATGCTTACTTCCCCTAGAGATGATGCCATTCAACTGTACAAGGCTTTC AAGGGATTTGGATGTGACACTTCTGCAGTAATCCATATCTTAGCTCGTCG' ], 'Contig25381' => [ 'GGACGAGATTTAACGACATCCATAAGCAACTCTGCTAATCATTCGATCTG CTTGGAGGTGTTTTTCCCCCATTTCCCTTAACCATGTCTCAGACTGTGGT' ], 'Contig25469' => [ 'GGCTCTCTACCTATCTGTCTCTCTCTACCTCTCTCTCCTTTCACGCACAC' ] }; #### use strict; use warnings; use Data::Dumper; use Fatal qw[open]; my %key; open my $data, '<', 'data.txt'; while(<$data>) { chomp; $key{$_} = 1; } my %line; open my $all, '<', 'all.txt'; open my $out, '>', 'requery.txt'; while(<$all>) { chomp; $line{key} = $_; $line{seq} = <$all>; # read the sequence chomp $line{seq}; my ($key) = ($line{key} =~ /(Contig\d*)/); if(exists $key{$key}) { print $out join("\n", $line{key}, $line{seq}) . "\n"; } }