use strict; use warnings; use File::Slurp qw(read_file); my $sfile = shift; my $dbfile = shift; my %series = map {/^(rs\d{1,18})\s+(rs\d{1,18})$/, $1=>$2} read_file $sfile; my %dbpairs = map {/\s+(rs\d{1,18})\s+/, $1=>1} grep {/rs\d{1,18}/} read_file $dbfile; foreach my $pair (sort keys %series){ if(exists $dbpairs{$pair} && exists $dbpairs{$series{$pair}}){ print "$pair $series{$pair}\n"; } }