use strict; use warnings; open(my $f1, '<', $ARGV[0]) or die "Could not open '$ARGV[0]' for reading, stopped"; open(my $f2, '<', $ARGV[1]) or die "Could not open '$ARGV[1]' for reading, stopped"; my @arr1 = <$f1>; my @arr2 = <$f2>; close $f1 or die "Could not close '$ARGV[0]', stopped"; close $f2 or die "Could not close '$ARGV[1]', stopped"; my %hash; for my $element (@arr2) { push @{ $hash{$1} }, $2 if $element =~ m{ ^ \s* (rs\d+) \s+ \** (\w{2}) }x; } my $i = 0; for my $element (@arr1) { if (my ($rsid, $base1, $description) = $element =~ m{ ^ \s* (rs\d+) \s+ \** (\w{2}) \** \s+ (.*) $ }x) { if (exists $hash{$1}) { for my $base2 (@{ $hash{$1} }) { print "$rsid $base1 $base2 $description\n"; ++$i; } } } } print "Found $i matches\n"; #### 23:14 >perl 1852_SoPW.pl file1 file2 rs492602 CC GG Vitamin B12 deficiency FUT2 Higher levels of vitamin B12 rs492602 CC CC Vitamin B12 deficiency FUT2 Higher levels of vitamin B12 rs492602 CT GG Vitamin B12 deficiency FUT2 Normal levels of vitamin B12 rs492602 CT CC Vitamin B12 deficiency FUT2 Normal levels of vitamin B12 rs492602 TT GG Vitamin B12 deficiency FUT2 Normal levels of vitamin B12 rs492602 TT CC Vitamin B12 deficiency FUT2 Normal levels of vitamin B12 Found 6 matches 23:14 >