특정 열의 값을 기준으로 합계를 인쇄합니다.

특정 열의 값을 기준으로 합계를 인쇄합니다.

파일이 있습니다.

Name ID Savings
RK   1  10000
RS   2  10900
RK   1  1380
RS   2  10200

두 사람(RK와 RS)의 총 저축액을 구하고 싶습니다. 그래서 내가 원하는 예상 결과는 다음과 같습니다.

RK 1 11380  (i.e 10000 + 1380)
RS 2 21100  (i.e 10900 + 10200)

답변1

$ awk 'NR > 1 { s[$2] += $3; n[$2] = $1 } END { for (i in s) { print n[i], i, s[i] }}' file
RS 2 21100
RK 1 11380

우리는 두 개의 배열을 사용합니다. 하나는 합계( )를 저장 s하고 다른 하나는 이름( n)을 저장합니다. 배열의 인덱싱은 ID를 사용하여 수행됩니다(같은 이름을 가진 사람이 여러 명 있을 수 있으므로 이를 인덱스로 사용하지 않습니다).

입력의 각 행(헤더 행 제외)에 대해 합계를 업데이트하고 이름을 저장합니다. 마지막으로 저장된 정보를 확인하고 인쇄해보겠습니다.

답변2

사용 awk:

awk 'NR>1{seen[$1FS$2]+=$NF} END{for (x in seen) print x, seen[x]}' in

이는 전체 열 #1과 열 #2를 읽고 필드 구분 기호를 FS그대로 유지합니다(예: 명명된 array의 공백) seen. 그리고 $1FS$2마지막 필드 값의 각 고유 조합을 합산합니다.

마지막으로 x배열을 변수로 반복하여 배열을 반복하고 $1FS$2값과 해당 합계를 먼저 인쇄합니다 seen[x].

이것이 in입력 파일 이름이 됩니다. NR>1헤더 행을 건너뛰고 있습니다 .오른쪽에코코드질소숫자=1 NR>1.

관련 정보