knoppix@Microknoppix:~$ perl -Mstrict -Mwarnings -E ' > my %counts = ( > Bact => { A => 3, B => 7, C => 6 }, > Euk => { B => 5, C => 9 }, > Proph_Vir => { A => 8, C => 4, D => 2 }, > ); > my @sortedKeys = do { > my %seen; > sort grep { not $seen{ $_ } ++ } > map { keys %{ $counts{ $_ } } } > keys %counts; > }; > > printf qq{%-10s%4s%4s%4s%4s\n}, q{}, @sortedKeys; > foreach my $flag ( sort keys %counts ) > { > printf qq{%-10s%4s%4s%4s%4s\n}, > $flag, > map { exists $counts{ $flag }->{ $_ } > ? $counts{ $flag }->{ $_ } > : 0 > } @sortedKeys; > }' A B C D Bact 3 7 6 0 Euk 0 5 9 0 Proph_Vir 8 0 4 2 knoppix@Microknoppix:~$