while () { print /(\d+)/ ? ", $1" : $s{$_}++ ? '' : $a++ ? "\n$_" : $_ for split /\s*,\s*/; } print "\n"; __DATA__ a, 1 aa, 3 aa, 5 aa, 8 b, 2 b, 3 bb, 5