сортировать только первый столбец и uniq

У меня есть список как таковой ниже:

1,cat 1,dog 2,apple 3,human 

Я бы хотел, чтобы результат был следующим:

 1,cat,dog 2,apple 3,human 

Таким образом, значение 1 из столбца 1 содержит значение кошки и собаки из столбца 2. Возможно ли это?

Предполагая, что первый столбец строго упорядочен:

 $ awk -F, '$1==last {printf ",%s",$2;next} NR>1{print""} {last=$1;printf "%s",$0} END{print""}' file 1,cat,dog 2,apple 3,human 

В качестве альтернативы, разрешая входные строки в любом порядке (и выходные линии не имеют гарантированного порядка):

 $ awk -F, '{a[$1]=a[$1]","$2} END{for (i in a)print ia[i]}' file 1,cat,dog 2,apple 3,human 

В Perl:

 $ perl -F',' -lane 'push @{$k{$F[0]}},@F[1..$#F]; END{$,=",";print $_,@{$k{$_}} for keys(%k)}' file 2,apple 1,cat,dog 3,human 

Или, для сортированного вывода:

 $ perl -F',' -lane 'push @{$k{$F[0]}},@F[1..$#F]; END{$,=",";print $_,@{$k{$_}} for sort keys(%k)}' file 1,cat,dog 2,apple 3,human 

Это имеет то преимущество, что имеет возможность иметь дело с произвольным числом полей. Если все ваши строки имеют только 2 поля, вы можете упростить

 perl -F',' -lane 'push @{$k{$F[0]}},$F[1]; END{$,=",";print $_,@{$k{$_}} for sort keys(%k)}' file