리눅스: bash스크립팅: 간단한 통계내기
2016.03.31 13:01
리눅스는 많은 툴들이 널려 있어서 정말 전체가 최고의 개발환경이라고 봐도 좋은거 같습니다.
잘만 활용하게 되면 활용범위도 무궁무진합니다.
사실 제가 취미삼아 개발하는게 여러 퍼즐 ai인데 오델로도 그중 하나입니다. 사실 아들에게 알파고에 대해 설명해주다가...만들게 된 프로그램입니다.
간단한 게임에도 여러가지 파라미터들의 조정이 가능한데 이들의 우열을 쉽게 가리기 힘든 경우가 많습니다. 오델로의 경우도 언제부터가 엔드게임수읽기가 시작되어야 하는지, 미들게임의 평가조건은 어때야하는지에 대한 분분한 기준이 있습니다.
그래서 평가식조건들을 변경해서 손쉽게 결과를 볼수 있는걸 만들어놓으면 좋겠죠.
심지어는 난수발생기로 돌려서 가장 적합한 조건들을 만드는 방법도 쓰입니다.
서로 반복하여서 싸우게 만들어서 결과값을 반영하는 것입니다.
이런 결과를 취합하는 과정을 자동화하는데 bash스크립트가 편리합니다.
먼저 로그를 뱉어내도록 만듭니다. 프로그램이 다음과 같은 로그를 찍는다 합시다.
첫번째 플레이어가 이기면 First player won!이 찍히고 두번째 플레이어가 이기면 Second player won! 이 찍힙니다.
대국 전체를 찍다보니 3분만에 오백만줄을 찍네요.
(아래 실행화면에서 보시면 배쉬자체에서 for 문으로 돌려서 위와같은 로그가 생성가능합니다.)
다음과 같은 스크립트를 작성합니다.
사용법은,
'stat 화일이름 첫번째경우 두번째경우'
로 사용합니다.
간단히 첫번째 문자열이 나타나는 줄 수를 세는 것입니다.
주의할점은 배시 자체에서는 정수연산만 되므로 확률은 외부 bc계산기를 이용해야 합니다.
정규식검색은 grep -e를 사용해도 되고 egrep을 사용해도 됩니다.
(어라 근데 비율숫자가 잘 안맞군요. bc의 scale파라미터때문인듯. 유효자리수를 4정도로늘려야합니다. scale=4)
이제 테스트를 합니다. 약 만번정도면 유효한 결과라고 생각되는군요.
실험결과로 첫번째 ai가 훨씬 강하다는것이 판명되었습니다.
또 나중에 평가식이 복잡해지는등 로그를 찍는게 너무 오래걸리는데 중간에 찍어보고 싶을 때는
'watch 명령' 을 사용하면 중간에 변하는 로그통계를 모니터할수 있습니다.
이런 식으로 자신의 프로젝트에서 활용해보세요~
코멘트 0
번호 | 제목 | 작성자 | 작성일 | 조회 |
---|---|---|---|---|
181 |
리눅스: 가상화폐 가격 알아보기
![]() | 영진 | 10.09 | 4052 |
180 | 리눅스: xfce4 화면 확대하기 | 영진 | 09.29 | 3853 |
179 | USB Type-C: 극히 조심하세요. [7] | 사드사랑 | 07.20 | 5281 |
178 | 문리더 비슷한 iOS 용 텍스트 리더 [3] | matsal | 07.18 | 6487 |
177 | USB Type-C: 도깨비 방망이 ? [14] | 사드사랑 | 03.07 | 5828 |
176 |
리눅스: 데스크탑 노티피케이션 이용하기
[2]
![]() | 영진 | 06.24 | 7108 |
175 |
리눅스: xfce4터미널 폰트조정하기
[4]
![]() | 영진 | 06.18 | 7251 |
174 |
리눅스: vim을 이북리더로 쓰기
[2]
![]() | 영진 | 06.15 | 7133 |
173 |
리눅스: 온라인 사전을 사용하자
[1]
![]() | 영진 | 06.11 | 6860 |
172 |
리눅스: 뉴스를 터미널에서 보자
[2]
![]() | 영진 | 06.10 | 6765 |
171 |
리눅스: 대기오염지수 보기
[3]
![]() | 영진 | 06.08 | 6534 |
170 |
리눅스: 간편하게 날씨예보보기
[2]
![]() | 영진 | 06.06 | 6698 |
169 | T전화 : 기본앱 대신 플레이스토어 앱으로 쓰기 그리고 두개가 뭐가 다른가. [2] | 피델리티 | 06.02 | 7104 |
168 | 리눅스: GUI 바꾸기 [민트리눅스] [2] | 영진 | 05.29 | 6878 |
167 |
리눅스: bash스크립팅 - 화일이름 일괄 바꾸기
[2]
![]() | 영진 | 05.22 | 6615 |
166 |
안드로이드 태블릿 기본적인 이해 및 테스트 방법론 (제1강)
![]() | 星夜舞人 | 05.20 | 6627 |
165 |
리눅스: 언어벤치마크
[4]
![]() | 영진 | 05.05 | 6803 |
» |
리눅스: bash스크립팅: 간단한 통계내기
![]() | 영진 | 03.31 | 6936 |
163 |
리눅스: vim: 설정하기
[1]
![]() | 영진 | 03.12 | 7221 |
162 |
리눅스: 생성일 기준으로 자동 파일 정리 스크립트 (초보)
[3]
![]() | 건설노무자 | 02.22 | 4699 |