id1 name1 cat1 catname1
id1 name1 cat2 catname2
id2 name2 cat3 catname3
id3 name3 cat1 catname1
id3 name3 cat4 catname4
####
id1 name1 cat1:catname1, cat2:catname2
id2 name2 cat3:catname3
id3 name3 cat1:catname1, cat4:catname4
####
my @val = split(" ",$val);
my $v = join (":", @val);
####
if (exists $hash{$key}) {
$hash{$key} .= $sep.$v;
}
else {
$hash{$key} = $v;
}
####
#!/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