use strict; use Data::Dumper; my (%h,%x,%y); scalar ; while(){ chomp; my ($id, $size, $qty, $price)= split /\s*,\s*/,$_ ; $h{$qty}{$size}=$price; $y{$qty}=1; $x{$size}=1; } for my $y (sort keys %y) { for my $x (sort keys %x) { if (exists $h{$y}{$x}) { print "$h{$y}{$x}\t"; }else { print "\t" } } print "\n"; } __DATA__ id, size, qty, price 1 , 1 , 100, 43 2 , 1 , 250, 52 4 , 2 , 100, 45 5 , 2 , 250, 55 6 , 3 , 100, 50 7 , 3 , 250, 56 8 , 4 , 200, 55 9 , 5 , 250, 61 #### 43 45 50 55 52 55 56 61