perl 공부를 작성 도중 궁금한 점이 있어서 문의 드립니다.~~~
글쓴이: lse0101 / 작성시간: 토, 2007/03/10 - 12:49오후
제가 로그를 뽑는 스크립트를 제작도중 궁금한게 있어서 문의 드립니다.
open함수를 이용해서 filehandle을 하나 열었습니다.
filehandle에서 한줄한줄 읽어다가 from<이메일 주소> 있는 부분의 줄의 라인을 저장합니다. 이유는 from <이메일이>란이 겹쳐서 나올수 있기때문에 라인 번호로 확실히 하기 위해서 저장을 했습니다
line번호를 전부 저장이 되면 이제부터 로그를 뽑기시작합니다.
12 from email
15 to local email
19-라인번호 end msg ---------------qmail log
찾고자 하는 로그가 발견되었습니다. 12번 라인에서 원고자 하는 정보를 얻었습니다.
프로그램은 저장해둔 라인을 다시 불러옵니다. 이번에는 300 라인에 있다고 합니다.
그럼 다시 seek(filehandle,0,0);으로 핸들을 원점으로 돌리고 라인을 300라인까지 읽은후 로그를 뽁게 됩니다...
로그가 짧다면 문제가 되지 않지만 몇만줄이 된다면 50000만번째에 있는걸 읽기 위해서 다시 5만번의 루프를 돌아야만 합니다.
혹시 이런 방법 말고 예를 들어 4만번째 라인에서 일을 처리하고 다시 4만번째부터 라인을 읽을 방법이 없을까요?
조언 부탁드립니다.
Forums:
텍스트파일을
텍스트파일을 데이터베이스 형식으로 사용할 수 있습니다.
http://www.unix.org.ua/orelly/perl/cookbook/ch14_08.htm
저같은 경우는 왠만큼 용량이 크지 않으면 그냥 다 메모리에 올려버립니다.
로그분석은 정규표현식등을 활용해서 가능하면 한번의 루프로 다 해결하는 편이구요.
답변 매우 감사합니다. ㅜㅜ
근데 왠만큼의 용량이라는건 어느 정도인가요?
대략 제가 돌리는 로그 파이르이 크기는 35~40MB정도 합니다.
모두 메모리에다가 올려서 하기가좀 그래서 일부러 파일 핸들에다가 쓰고서 한줄씩 읽어 들이고 있씁니다...
저또한 한번에 모든 걸 처리하고 싶으나.. 실질적으로 메일 로그의 경우 메일의 로그가 지연되거나 하면 너무 아래 까지 내려가 중간에서 발생한 이벤트까지 발견할려면 다시 위로 올라갈수밖에 없습니다....
그래도 너무 감사합니다. 한번 열심히 읽어 보도록 하겠씁니다.
이전에 귀찮아서
이전에 귀찮아서 대략 700MB 텍스트 파일을 한번에 다 올렸습니다
한줄씩 문자열 검색하는 거였는데 5초 안팎이었던걸로 기억합니다
정말 존경 스럽내요;;;
700메가 정도면 pc가 감당 할수 있을가요;;
하긴.. 700메가면 30~40메가는 세발에 피군요;;
얼마나 성능 향상이 이루어 지는지 함 넣어봐야겟따;
어느정도 리소스를
어느정도 리소스를 사용해도 되는가에 따라 그때 그때 틀리겠죠.
제 데스크탑에서는 근거없이 100M정도까지는 그냥 올린다.. 라고 생각하고 있습니다만 요즘 메모리가 워낙 좋으니
한번에 한가지 일만 한다면 메모리 만큼 읽어도 되지 않을까 생각합니다.
리소스가 걱정된다면 데이터베이스 형태로 읽는 것이 제일 좋다고 생각합니다.
댓글 달기