use strict; my %hh; #read in... while () { my ($k, $v) = split /\s*,\s*/; chomp $v; $hh{$k}{$v}++; } #now to print out... foreach my $k (sort {$a cmp $b} keys %hh) { my $tlist = ''; my $tally = 0; foreach my $v (sort {$a cmp $b} keys %{$hh{$k}}) { $tally += $hh{$k}{$v}; $tlist .= "$v, "; } chop $tlist; chop $tlist; #remove trailing ', ' print "$tally\t$k\t$tlist\n"; } __DATA__ abcd, GB abcd, UK abcd, US addd, US