나는 다음과 같은 데이터를 가지고 있습니다 :
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