use strict; my %table; my %rows_cols; my %cols; for() { chomp; my($row,$col,$val) = split ', *'; if ($row>$col) { ($row,$col) = ($col,$row); } $table{$row}{$col} = $val; $rows_cols{$row}++; $rows_cols{$col}++; } for my $col (sort keys %rows_cols) { print "\t$col"; } print "\n"; my $val; for my $row (sort keys %rows_cols) { print "$row\t"; for my $col (sort keys %rows_cols) { if (defined $table{$row}{$col}) { print $table{$row}{$col}; } elsif (defined $table{$col}{$row}) { print $table{$col}{$row}; } else { print "-"; } print "\t"; } print "\n"; } __END__ ob1, ob2, 34 ob1, ob3, 56 ob1, ob4, 12 ob1, ob5, 78 ob1, ob6, 23 ob3, ob1, 56 ob7, ob1, 23 ob8, ob1, 12 ob9, ob1, 90 ob3, ob2, 87