perl 공부를 작성 도중 궁금한 점이 있어서 문의 드립니다.~~~

lse0101의 이미지

제가 로그를 뽑는 스크립트를 제작도중 궁금한게 있어서 문의 드립니다.

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만번째부터 라인을 읽을 방법이 없을까요?

조언 부탁드립니다.

pung96의 이미지

텍스트파일을 데이터베이스 형식으로 사용할 수 있습니다.
http://www.unix.org.ua/orelly/perl/cookbook/ch14_08.htm

저같은 경우는 왠만큼 용량이 크지 않으면 그냥 다 메모리에 올려버립니다.
로그분석은 정규표현식등을 활용해서 가능하면 한번의 루프로 다 해결하는 편이구요.

lse0101의 이미지

근데 왠만큼의 용량이라는건 어느 정도인가요?

대략 제가 돌리는 로그 파이르이 크기는 35~40MB정도 합니다.
모두 메모리에다가 올려서 하기가좀 그래서 일부러 파일 핸들에다가 쓰고서 한줄씩 읽어 들이고 있씁니다...

저또한 한번에 모든 걸 처리하고 싶으나.. 실질적으로 메일 로그의 경우 메일의 로그가 지연되거나 하면 너무 아래 까지 내려가 중간에서 발생한 이벤트까지 발견할려면 다시 위로 올라갈수밖에 없습니다....

그래도 너무 감사합니다. 한번 열심히 읽어 보도록 하겠씁니다.

익명사용자의 이미지

이전에 귀찮아서 대략 700MB 텍스트 파일을 한번에 다 올렸습니다

한줄씩 문자열 검색하는 거였는데 5초 안팎이었던걸로 기억합니다

lse0101의 이미지

700메가 정도면 pc가 감당 할수 있을가요;;

하긴.. 700메가면 30~40메가는 세발에 피군요;;

얼마나 성능 향상이 이루어 지는지 함 넣어봐야겟따;

pung96의 이미지

어느정도 리소스를 사용해도 되는가에 따라 그때 그때 틀리겠죠.
제 데스크탑에서는 근거없이 100M정도까지는 그냥 올린다.. 라고 생각하고 있습니다만 요즘 메모리가 워낙 좋으니
한번에 한가지 일만 한다면 메모리 만큼 읽어도 되지 않을까 생각합니다.
리소스가 걱정된다면 데이터베이스 형태로 읽는 것이 제일 좋다고 생각합니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.