다음과 같은 예가 포함된 텍스트 파일이 있습니다.
a | 0 | 11
a | 0 | 22
a | 1 | 22
a | 1 | 22
나는 다음 명령을 사용하고 있습니다 :
awk -F"|" '{ sum[$1"|"$2]+=$3 } END { for (user in sum) printf "%10d |%12.2f\n",user,sum[user] }' myfile
결과를 낳다
0 | 33.00
0 | 44.00
내 예상 결과
a | 0 | 33
a | 1 | 44
답변1
귀하의 진술을 수정하십시오 printf
:
awk -F'|' '
{sum[$1"|"$2]+=$3}
END{for (i in sum){printf "%s| %d\n",i,sum[i]}}
' file
산출:
a | 0 | 33
a | 1 | 44
SQL의 경우 이는 매우 간단한 작업이기도 합니다.
csvsql -d '|' -H --tables t \
--query 'select trim(a),b,sum(c) from t group by a,b' \
<(grep -v '^$' file)
산출:
trim(a),b,sum(c)
a,0,33
a,1,44
| tail -n+2
머리글 행을 제거하려면 추가 하고 | csvformat -D '|'
구분 기호를 로 변경합니다 |
.
산출:
a|0|33
a|1|44