![1개 열에서 고유한 값을 가져오고 다음 2개 열을 합산합니다. [닫기]](https://linux55.com/image/86583/1%EA%B0%9C%20%EC%97%B4%EC%97%90%EC%84%9C%20%EA%B3%A0%EC%9C%A0%ED%95%9C%20%EA%B0%92%EC%9D%84%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B3%A0%20%EB%8B%A4%EC%9D%8C%202%EA%B0%9C%20%EC%97%B4%EC%9D%84%20%ED%95%A9%EC%82%B0%ED%95%A9%EB%8B%88%EB%8B%A4.%20%5B%EB%8B%AB%EA%B8%B0%5D.png)
다음과 같은 텍스트 파일이 있습니다.
A 500 100 ABC
B 200 100 BBB
B 200 100 ACC
D 150 235 CDD
A 500 100 RER
C 210 653 DDD
C 210 653 DWR
D 150 653 DDW
D 150 653 DER
내가 달성하려는 것은 첫 번째 고유 이름을 필터링하고 그 뒤에 있는 모든 값의 합계(열 2와 열 3의 합계)를 얻는 것입니다. 예를 들면 다음과 같습니다.
A 1000 200
B 400 200
다음 awk 라인을 사용하여 처음 2개를 작업했습니다.
awk '{a[$1]+=$2} END {for(i in a) print i,a[i] }' file
결과 :
A 1000
B 400
나는 믹스에 세 번째 열을 추가해야 한다고 주장합니다. 열 3을 추가하는 방법에 대한 팁이 있는 사람이 있나요?
답변1
다음 테스트 버전을 사용해 보세요.
awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
연관 배열을 사용합니다. 유명한 튜토리얼을 참조하세요.Awk - 튜토리얼 및 소개 - Bruce Barnett 작성
테스트는 다음과 같습니다.
awk '{ colone[$1]+=$2; coltwo[$1]+=$3; } END { for (i in colone) { print i " " colone[i] " " coltwo[i]; }}' file
A 1000 200
B 400 200
C 420 1306
D 450 1541