본문 바로가기
Linux Unix

[ Linux ] 특정 부분 합계 연산 스크립트

by 정윤재 2011. 10. 27.

만약 내용이

2011031100 : 0.128527 ( 31703 )
2011031101 : 0.12984 ( 20135 )
2011031102 : 0.129444 ( 13003 )
2011031103 : 0.128738 ( 8881 )
2011031104 : 0.143816 ( 7124 )
2011031105 : 0.124928 ( 8988 )
2011031106 : 0.122789 ( 20174 )
2011031107 : 0.115954 ( 44538 )
2011031108 : 0.109416 ( 61913 )
2011031109 : 0.111408 ( 72226 )
2011031110 : 0.106147 ( 86204 )
2011031111 : 0.107407 ( 90709 )
2011031112 : 0.109941 ( 87911 )
2011031113 : 0.108501 ( 97112 )
2011031114 : 0.108058 ( 100801 )
2011031115 : 0.108743 ( 105615 )
2011031116 : 0.111409 ( 104375 )
2011031117 : 0.113514 ( 110831 )
2011031118 : 0.112232 ( 131080 )
2011031119 : 0.114007 ( 124212 )
2011031120 : 0.119759 ( 92986 )
2011031121 : 0.119136 ( 81214 )
2011031122 : 0.11629 ( 67272 )
2011031123 : 0.123274 ( 55419 )

와 같은 20110311.txt 라는 이름의 파일이 있다고 하자.

그런데 나는 " " 를 구분자로 3번째 값인 0.xxx 들의 합계와 평균을
구하고 싶다.

그렇다면 awk 를 써서

cat 20110311.txt | awk -F " " 'BEGIN{TOTAL=0;COUNT=0}{TOTAL+=$3;COUNT+=1.0}END{printf"%f / %f => %.3f \n",TOTAL,COUNT,TOTAL/COUNT}'

라고 하면 된다.

설명을 붙이자면
1. cat 20110311.txt 은 20110311.txt  안의 내용을 보자는 얘기
2. awk -F " "  는 구분자로 스페이스를 두겠다는 얘기
3. BEGIN{TOTAL=0;COUNT=0} 는 사용할 변수들에 대한 초기화
4. {TOTAL+=$3;COUNT+=1.0} 는 3번째 값인 0.xxx 들을 더하는 것과
    count 를 세라는 명령
5. END{printf"%f / %f => %.3f \n",TOTAL,COUNT,TOTAL/COUNT}
    는 연산을 다하고 나서 "합계,총 갯수, 합계/총 갯수(평균)" 을 출력
    (%f 는 실수 출력, %.3f 는 소숫점 3번째 자리까지 출력 -반올림 하여)

이렇게 실행 하라는 명령이다.

[그림1. awk 실행 결과]


댓글