만약 내용이
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번째 자리까지 출력 -반올림 하여)
이렇게 실행 하라는 명령이다.
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 실행 결과]
'Linux Unix' 카테고리의 다른 글
[ Linux ] 쉘 스크립트 for 문 사용법 (0) | 2011.11.07 |
---|---|
[ Linux ] 쉘스크립트 숫자 연산 (계산) (0) | 2011.10.31 |
[ Linux ] 프로세스 죽이기 쉘 (11) | 2011.10.26 |
[ Linux ] 최근 접속 사용자 정보 (0) | 2011.10.20 |
[ Linux ] 마지막 부팅 정보 확인 (0) | 2011.10.20 |
댓글