use strict; use warnings; use Text::CSV_XS; my $csv = Text::CSV_XS->new ({ sep_char => "\t", auto_diag => 1 }); my %Diag; while (my $row = $csv->getline (*DATA)) { push @{$Diag{$row->[0]}}, $row->[1]; } $csv->eol ("\n"); $csv->sep_char (","); $csv->print (*STDOUT, [ $_, @{$Diag{$_}} ]) for sort keys %Diag; __DATA__ Name1 1234 Name2 9999 Name1 5514 Name3 5415 Name2 6419