my %AB; while () { chomp; my ($id, $name, $desc, $app) = split /\s*,\s*/; push @{$AB{$id}{app}}, $app; $AB{$id}{name_desc} = "$name, $desc"; } for my $id (sort keys %AB) { print "$id, $AB{$id}{name_desc}, ", join(',', @{$AB{$id}{app}}), "\n"; }