my $result = {
'A' => {
1 => 1,
2 => 1,
7 => 1,
10 => 1,
...
},
'B' => {
...
},
...
};
####
open my $fh, '<', $filename;
while (<$fh>) {
chomp;
my ($id, @numbers) = split;
for my $number (@numbers) {
$result->{$id}{$number} = 1;
}
}
####
my %unique_numbers = ();
for (values %$result) {
for my $number (keys %$_) {
$unique_numbers{$number} = 1;
}
}
my @numbers = sort {$a <=> $b} keys %unique_numbers;
open my $out_fh, '>', $output_filename;
print $out_fh "IDs @numbers\n";
for my $id (sort keys %$result) {
my @fields = $id;
for my $number (@numbers) {
if (exists $result->{$id}{$number}) {
push @fields, 1;
}
else {
push @fields, 0;
}
}
my $string = join " ", @fields;
print $out_fh "$string\n";
}