my %lines; read_results("file1.txt"); read_results("file2.txt"); print "$lines{$_}\n" for sort {$a <=> $b} keys %lines; sub read_results { my $fn = shift; open my $FH, "<", $fn or die "couldn't open $fn: $!"; while (my $line = <$FH>) { chomp $line; my ($id) = $line =~ /TAT_(\d+)/; next unless $id; $lines{$id} = $line; } }