중복된 줄을 쉼표로 구분하여 한 줄로 병합하는 방법

중복된 줄을 쉼표로 구분하여 한 줄로 병합하는 방법

나는 다음과 같은 데이터를 가지고 있습니다 :

St1 apt1
St1 apt2
St2 apt5
St3 apt6
St3 apt7
St3 apt8

중복된 줄을 병합하고 필드를 쉼표로 구분하고 2개의 열을 갖고 싶습니다. 예를 들면 다음과 같습니다.

St1 apt1,apt2
St2 apt5
St3 apt6,apt7,apt8

다음 명령을 시도했지만 예상대로 작동하지 않았습니다.

awk 'BEGIN{FS="\t"}; BEGIN{OFS="\t"}; { arr[$1] = arr[$1] $2 }   END {for (i in arr) print i arr[i] }'

결과는 다음과 같습니다.

St1apt1apt2
St2apt5
St3apt6apt7apt8

어떠한 제안?

답변1

몇 가지만 수정하면 됩니다.

$ awk '
    BEGIN{FS="\t"; OFS=FS}; 
    { arr[$1] = arr[$1] == ""? $2 : arr[$1] "," $2 }   
    END {for (i in arr) print i, arr[i] }
' data
St1    apt1,apt2
St2    apt5
St3    apt6,apt7,apt8

답변2

sed -e '
   :a
   $!N
   s/^\(\(\S\+\)\s\+.*\)\n\2\s\+/\1,/;ta
' yourfile

결과

St1 apt1,apt2
St2 apt5
St3 apt6,apt7,apt8

관련 정보