다음 파일/텍스트가 있습니다.
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
연관 배열("숫자"용)을 유지합니다 . 특정 과일의 값은 첫 번째 코드 블록에서 작성된 쉼표로 구분된 숫자 문자열입니다.n
n
첫 번째 코드 블록에 있는 흥미로운 코드는 비어 있는 n[$1]
경우 두 번째 열의 값을 할당하고 n[$1]
, 그렇지 않으면 쉼표를 추가하고 해당 값을 기존 값에 추가합니다.
이 블록은 END
모든 키를 반복하여 결과 데이터를 인쇄합니다.n