awk 입문자의 질문입니다.
아래와 같은 cumul.txt파일의 자료를 처리하려고 합니다.(실제 파일은 이것보다 아주 많이 깁니다.)
cumul.txt
A 1 4
A 2 4
A 3 5
A 4 5
A 5 5
A 6 9
A 7 8
A 8 8
A 9 4
A 10 2
A 11 2
A 12 0
A 13 0
B 1 1
B 2 1
B 3 1
B 4 4
B 5 6
B 6 7
B 7 6
B 8 4
B 9 2
B 10 2
C 1 5
C 2 9
C 3 8
C 4 7
C 5 3
D 1 3
위의 파일로 각 A, B, C, D 항목에 대해 아래와 같은 처리를 하여
A {(3열 값의 총합=4+4+5+5+5+9+8+8+4+2+2+0+0=56)/(행 개수=13)}=4.3077
B 같은 방법으로 34/10=3.4
C 32/5=6.4
D 3/1=3
아래와 같은 파일을 얻고자 합니다.
output.txt
A 4.3077
B 3.4
C 6.4
D 3
아래와 같은 awk 스크립트를 만들었습니다.
cat cumul.txt | awk 'BEGIN{val = 0;n=0}{if(($2 !=1)||(($2 ==1)&&(NR==1))){n=n+1;val=val+$3};if($2 == 1){if(NR > 1){print $1"\t"val/n}; val=$3;n=1}}END{print $1"\t"val/n}' > output.txt
어째 결과물은 아래와 같군요;;;
output.txt
B 4.3077
C 3.4
D 6.4
D 3
어떻게 수정해야 원하는 결과를 얻을 수 있을까요?
awk 보다는 bash스크립트로 각 항목별로 bc
awk 보다는 bash스크립트로 각 항목별로 bc 돌리는게 더 낫지 않을까 합니다만..
오 감사합니다.
작은 파일들에는 이걸로 써먹어야겠네요. 이번 건은 항목별 행 수도 많고 무엇보다 항목 자체가 수만 개라 뭔가 일괄 처리를 하는 게 낫겠다 싶더라고요ㅠㅠ그래도 작은 파일들 평소에 돌릴 때는 이거 괜찮을 것 같네요. 감사합니다!
오 감사합니다.
작은 파일들에는 이걸로 써먹어야겠네요. 이번 건은 항목별 행 수도 많고 무엇보다 항목 자체가 수만 개라 뭔가 일괄 처리를 하는 게 낫겠다 싶더라고요ㅠㅠ그래도 작은 파일들 평소에 돌릴 때는 이거 괜찮을 것 같네요. 감사합니다!
댓글 달기