다음과 같은 파일이 있습니다.
user1, 10
user2, 5
user2, 6
user1, 15
user3, 23
user1, 15
열 1(user1, user2, user3)별로 합계를 계산하여 다음과 같이 만들고 싶습니다.
user1, 40
user2, 11
user3, 23
앞으로 나아갈 가장 좋은 방법은 무엇입니까? 첫 번째 열을 반복 while
하고 두 번째 열의 합이 동일하다면?
답변1
awk 한 줄 :
$ awk -F, '{a[$1] += $2} END { for (x in a) printf "%s, %s\n", x, a[x] }' < data
user1, 40
user2, 11
user3, 23
이는 매우 간단합니다. 필드 구분 기호는 쉼표로 설정됩니다 -F,
(이와 출력의 쉼표는 중복 항목에 필요한 유일한 변경 사항입니다). $1
및 $2
는 첫 번째 및 두 번째 필드이고 awk에는 연관 배열이 있으므로 합계를 수집하는 것이 간단합니다. sort
중요한 경우 나중에 출력할 수도 있습니다.
물론 Bash/ksh/zsh에서만 이 작업을 수행할 수도 있습니다. 이는 연관 배열도 지원하기 때문입니다. 하지만 이는 더 추악하고 느리며 흥미로운 값으로 인해 놀라움을 금치 못할 가능성이 더 높습니다. 그리고 어떤 이유로 큰 쉘이 있지만 awk가 없는 시스템에서만 유용합니다. (정말 원한다면 편집 기록을 확인하세요...)