Eu não sei quão eficiente será, mas você poderia fazer algo assim com um hash de matrizes anônimas, usando um map
para aplicar a atribuição de concatenação de strings .=
a cada elemento de cada valor de hash:
perl -F, -nle '
$k = shift @F;
map { $h{$k}[$_] .= $F[$_] } 0..$#F
}{
for $k (sort { $a <=> $b } keys %h) {
print join ",", $k, @{ $h{$k} }
}' file
key,c1,c2,c3......,cn
1,caryes,phoneno,catis,..............,kitehello
2,abchello,defyes,hijno,.............,pothelp