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 etc ... #### ob1 ob2 ob3 ob4 ob5 ob6 ob7 ob8 ob9 ob1 0 34 56 12 78 23 23 12 90 ob2 34 ob3 56 ob4 12 ob5 78 ob6 23 ob7 23 ob8 12 ob9 90 #### ob1, ob3, 56 ob3, ob1, 56 #### #!/usr/local/bin/perl use strict; my $data = $ARGV[0]; # open file here open(DATA, "$data") || die "cant open file for reading\n"; my %table; my %rows; my %cols; for() { my($row,$col,$val) = split ','; $table{$row}{$col} = $val; $rows{$row}++; $cols{$col}++; } for my $col (sort keys %cols) { print "\t$col"; } print "\n"; for my $row (sort keys %rows) { print "$row\t"; for my $col (sort keys %cols) { print $table{$row}{$col} if defined $table{$row}{$col}; print "\t"; } print "\n"; } #### ob1 ob2 ob3 ob4 ob5 ob6 ob1 34 56 12 78 23 ob3 56 ob7 23 ob8 12 ob9 90