AWK: 다른 열의 항목을 기반으로 한 열의 값 합계 [중복]

AWK: 다른 열의 항목을 기반으로 한 열의 값 합계 [중복]

같은 표의 첫 번째 열에 주어진 항목을 기준으로 아래 표의 세 번째 열에 나열된 값을 합산하고 싶습니다. 표의 내용은 다음과 같습니다.

John|Login|2
Mary|Login|10
Mary|Payroll|100
John|Login|200
John|Logout|10
Mary|Payroll|10

예상되는 결과는 다음과 같습니다.

John|Login|202
John|Logout|10
Mary|Login|10
Mary|Payroll|110

이 출력을 어떻게 awk얻을 수 있습니까?

답변1

이 명령은 나에게 효과적입니다. 그것은 당신에게 도움이 될 것입니다:

     awk -F '|' '{a[$1"|"$2"|"]+= $3} END{for (i in a) print i, a[i]}' filename | sort -k 1,1
John|Login| 202
John|Logout| 10
Mary|Login| 10
Mary|Payroll| 110

답변2

GNU가 설치되어 있는 경우 순서를 올바르게 설정하기 위해 awk다른 도구를 사용할 필요는 없지만 sort직접 설정할 수 있습니다 awk. 특수 변수를 설정하여 배열 순회 작동 방식을 설정할 수 있습니다 PROCINFO["sorted_in"]. 바라보다미리 정의된 배열 스캔 순서 사용gawk

귀하의 경우에는 인덱스 오름차순으로 정렬하도록 설정할 수 있습니다

awk -vFS="|" -vOFS="|"  '{ 
                             primaryKey=($1 FS $2)
                         }{ 
                             db[primaryKey]+=$3; next 
                         } END { 
                             PROCINFO["sorted_in"] = "@ind_str_asc"
                             for(key in db) 
                                 print key, db[key] 
                         }' file

관련 정보