use Data::Dumper; while () { chomp; @F = split /\t/; # <== place proper delimiter or regex $devices{$F[4]}{$F[-1]}++; } $Data::Dumper::Sortkeys = 1; print Dumper \%devices; # accessing for $type (sort keys %devices) { for $size (sort {$a <=> $b} keys %{$devices{$type}}) { print "$type $size $devices{$type}{$size} \n"; } }