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