if first line of file2 is a primary key, below will work. But if not, it will fail like this ...
use strict;
use warnings;
my $file1=<<EOF;
23 SNP_A-4293670 0 2713391
24 SNP_A-4293670 0 2713391
25 SNP_A-1780270 0 1111111
26 SNP_A-1780271 0 2222222
EOF
my $file2=<<EOF;
SNP_A-1780270 ss75925050 rs987435
SNP_A-1780271 ss75925050 rs000001
SNP_A-4293670 ss75925050 rs999999
SNP_A-4293670 ss75925050 xxxxxxxx
EOF
my %lookup;
foreach my $line ( split( /\n/, $file2) ){
my @line=split(/\s+/,$line);
$lookup{$line[0]}=$line[2];
}
print "k=$_,v=$lookup{$_}\n" for keys %lookup;
foreach my $line ( split( /\n/, $file1) ){
my @line=split(/\s+/,$line);
printf "%s\t%s\t%s\t%s\n", $line[0], $lookup{$line[1]}, $line[2],
+$line[3];
}
result
23 xxxxxxxx 0 2713391
24 xxxxxxxx 0 2713391
25 rs987435 0 1111111
26 rs000001 0 2222222
first column of the seconde file is the problem. Is it unique key?
|