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 >