첫 번째 열과 uniq만 정렬

첫 번째 열과 uniq만 정렬

다음과 같은 목록이 있습니다.

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

나는 다음과 같은 출력을 원합니다 :

1,cat,dog  
2,apple  
3,human  

따라서 1열의 값 1에는 2열의 cat 및 dog 값이 포함됩니다. 가능합니까?

답변1

첫 번째 열이 엄격하게 정렬되었다고 가정합니다.

$ 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 i a[i]}' file
1,cat,dog
2,apple
3,human

답변2

펄에서는:

$ 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 

관련 정보