use strict;
use warnings;
my @id1 = (1..5);
my @id2 = (11..15);
my %hash;
my %col_header;
my %row_header;
my $last = $#id1 > $#id2 ? $#id1 : $#id2;
for my $i (0..$last) {
if ( defined( $id2[$i] ) ) {
$col_header{$id2[$i]} = 1;
}
if ( defined( $id1[$i] ) ) {
$row_header{$id1[$i]} = 1;
}
if ( defined( $id1[$i] ) and defined( $id2[$i] ) ) {
$hash{$id1[$i]}{$id2[$i]} = 1;
}
}
my @col_header = sort numeric keys %col_header;
my @row_header = sort numeric keys %row_header;
printf "%10s" x (@col_header + 1), "id1\\id2", @col_header;
print "\n";
for my $row ( @row_header ) {
printf "%10s", "$row";
for my $col ( @col_header ) {
printf "%10s", ( exists( $hash{$row}{$col} ) ? "1" : "0");
}
print "\n";
}
sub numeric {
$a <=> $b;
}
####
id1\id2 11 12 13 14 15
1 1 0 0 0 0
2 0 1 0 0 0
3 0 0 1 0 0
4 0 0 0 1 0
5 0 0 0 0 1
####
use strict;
use warnings;
my $pair_name;
while (<>)
{
$pair_name = join '\\', split;
last;
}
my %hash;
my %col_header;
my %row_header;
while (<>)
{
my @pair = split;
$hash{$pair[0]}{$pair[1]} =
$row_header{$pair[0]} =
$col_header{$pair[1]} = 1;
}
my @col_header = sort numeric keys %col_header;
my @row_header = sort numeric keys %row_header;
printf "%10s" x (@col_header + 1), $pair_name, @col_header;
print "\n";
for my $row ( @row_header ) {
printf "%10s", "$row";
for my $col ( @col_header ) {
printf "%10s", ( exists( $hash{$row}{$col} ) ? "1" : "0");
}
print "\n";
}
sub numeric {
$a <=> $b;
}