CHROM POS REF ALT VARIANT_LIST 209T-D 459T-D 644T-D 94T-D 99T1-D 99T2-D 99T3-D 99T4-D 99T5-D
MT 1010 G A A REF A A REF A A A A A
MT 2962 C T T REF T T T T T T T T
####
CHROM POS REF ALT VARIANT_LIST 209H-D 459H-D 644H-D 94H-D 99H-D
MT 1010 G A A REF REF REF REF REF
MT 2962 C T T REF REF T REF T
####
#! perl
use strict;
use warnings;
my $file1 = 'File_1b.txt'; # shift;
my $file2 = 'File_2b.txt'; # shift;
open(my $in1, '<', $file1)
or die "Cannot open file '$file1' for reading: $!";
open(my $in2, '<', $file2)
or die "Cannot open file '$file2' for reading: $!";
chomp(my $header1 = <$in1>);
chomp(my $header2 = <$in2>);
my @heads1 = split /\s+/, $header1;
my @heads2 = split /\s+/, $header2;
my $low_idx = 5;
my %index_map;
for my $i ($low_idx .. $#heads1)
{
$index_map{$i} = undef;
my ($num1) = $heads1[$i] =~ /^(\d+)/;
next unless defined $num1;
for my $j ($low_idx .. $#heads2)
{
my ($num2) = $heads2[$j] =~ /^(\d+)/;
if (defined $num2 && $num1 == $num2)
{
$index_map{$i} = $j;
last;
}
}
}
print $header1, "\n";
while (my $line1 = <$in1>)
{
chomp $line1;
my @fields1 = split /\s+/, $line1;
defined(my $line2 = <$in2>)
or die "Data missing in file '$file2': $!";
chomp $line2;
my @fields2 = split /\s+/, $line2;
my @out = @fields1;
for my $i ($low_idx .. $#fields1)
{
my $j = $index_map{$i};
if ( $fields1[$j] ne 'REF' &&
exists $fields2[$j] &&
$fields2[$j] ne 'REF')
{
if ($fields1[$j] eq $fields2[$j])
{
$out[$i] = 'REF';
}
else
{
$out[$i] = $fields2[$j];
}
}
}
print join(' ', @out), "\n";
}
close $in2
or die "Cannot close file '$file2': $!";
close $in1
or die "Cannot close file '$file1': $!";
####
23:33 >perl 959b_SoPW.pl
CHROM POS REF ALT VARIANT_LIST 209T-D 459T-D 644T-D 94T-D 99T1-D 99T2-D 99T3-D 99T4-D 99T5-D
MT 1010 G A A REF A A REF A A A A A
MT 2962 C T T REF T REF T REF REF REF REF REF
23:33 >