첫 번째 열을 기준으로 세 번째 열을 표시하고 두 번째 열은 변경하지 않고 유지하는 방법

첫 번째 열을 기준으로 세 번째 열을 표시하고 두 번째 열은 변경하지 않고 유지하는 방법

다음과 같은 예가 포함된 텍스트 파일이 있습니다.

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

관련 정보