파일이 있습니다.
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
.