awk를 사용하여 행 통합

awk를 사용하여 행 통합

다음 파일/텍스트가 있습니다.

apple 1
apple 2
apple 3
banana 22
banana 5
string 1

다음 결과를 반환하려면 명령을 어떻게 실행해야 합니까?

apple numbers:1,2,3
banana numbers:22,5
string numbers:1

답변1

$ awk '{ n[$1] = (n[$1] == "" ? $2 : n[$1] "," $2) } END { for (f in n) printf "%s numbers:%s\n", f, n[f] }' file
apple numbers:1,2,3
banana numbers:22,5
string numbers:1

이는 작업을 해결하는 데 사용됩니다 awk.

프로그램 은 키로 사용되는 첫 번째 열의 과일 이름과 함께 awk연관 배열("숫자"용)을 유지합니다 . 특정 과일의 값은 첫 번째 코드 블록에서 작성된 쉼표로 구분된 숫자 문자열입니다.nn

첫 번째 코드 블록에 있는 흥미로운 코드는 비어 있는 n[$1]경우 두 번째 열의 값을 할당하고 n[$1], 그렇지 않으면 쉼표를 추가하고 해당 값을 기존 값에 추가합니다.

이 블록은 END모든 키를 반복하여 결과 데이터를 인쇄합니다.n

관련 정보