Not exactly sure what the numbers 1, 2, 4, 8 represent, but here's a 5 or 10 minute hack job:
use strict;
my ($handle, @header, @file1, @file2, $row, $col, @output);
### Load header data
open ($handle, 'header.txt')
|| die "Can't load header file.\n";
while (<$handle>) {
@_ = split /,/, $_;
$_ = pop @_; chomp;
push @header, $_;
}
close ($handle);
### Load file 1 as array of arrays
open ($handle, 'file1.txt')
|| die "Can't load data file 1.\n";
while (<$handle>) {
push @file1, [split /,/, $_];
}
close ($handle);
### Load file 2
open ($handle, 'file2.txt')
|| die "Can't load data file 2.\n";
while (<$handle>) {
push @file2, [split /,/, $_];
}
close ($handle);
### Output header line
print join "\t", @header; print "\n";
### For each line, output x for fields with a difference
for ($row = 0; $row <= $#file1; $row++) {
@output = ();
for ($col = 0; $col <= $#header; $col++) {
push @output, $file1[$row][$col] ne $file2[$row][$col] ?
'x' : '';
}
print join "\t", @output; print "\n";
}