use warnings; use strict; open my $IN,'<','894013-1' or die "Cannot open file1: $!\n"; open my $AL,'<','894013-2' or die "Cannot open file2: $!\n"; my @alleles = map {chomp; split / /} <$AL>; while (<$IN>) { chomp; my @individual = split / /; for my $half (0 .. @individual/2-1) { my %pair; my ($pos1,$pos2) = ($half*2,$half*2+1); undef @pair{@individual[$pos1,$pos2]}; my @pair = keys %pair; my ($minor,$major) = @alleles[$pos1,$pos2]; if (@pair == 1) { if ($pair[0] eq $minor) { print 0; } elsif ($pair[0] eq $major) { print 2; } else { print -1; } } else { if (exists $pair{$minor} and exists $pair{$major}) { print 1; } else { print -1; } } print ' '; } print "\n"; }