#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my %hash; my $sep = ", "; while () { chomp; (my $key, my $val) = /(\S*\s*\S*\s*)(\S*\s*\S*\s*)/; my @val = split(" ",$val); my $v = join (":", @val); if (exists $hash{$key}) { $hash{$key} .= $sep.$v; } else { $hash{$key} = $v; } } foreach my $k (sort keys %hash) { print $k.$hash{$k}."\n"; } #print Dumper \%h; __DATA__ id1 name1 cat1 catname1 id1 name1 cat2 catname2 id2 name2 cat3 catname3 id3 name3 cat1 catname1 id3 name3 cat4 catname4