2004년 2월 20일 금요일

Perl Regular expression써서 text file filtering 하는 script (sort, grep의 버그 등..)

  대학 1학년 숙제로나 나올법한 일인데.
  나름대로 최적화가 될 가능성이 남아있었다.
  1. regular expression의 evaluation을 loop 밖에서 미리 한다.
     (qr/ / 이용)
  2. 많이 걸러질 rule를 먼저 match 시켜서 if instruction의 수행량을 줄인다.
     (단순한 rule들은 compression하고 rule를 heuristic하게 sort한다.)
  3. I/O 크기를 줄인다. (output 파일의 내용을 줄인다.)
  
---------------------
RedHat 9 에서 sort와 grep의 문제점.

locale에 따라(LC_COLLATE 환경변수 설정)에 따라 collation방법(string compare)이 다르다.
따라서 strcmp()와 같은 방식으로 하려면 locale을 C (unset)으로 줘야한다.

$ (LANG=C sort -T /svc/tms/tmp)

grep도 collation 방법에 따라 속도가 10배 이상 차이나기도 한다.
$ (LANG=C grep -i -v -F -f $DOMAIN_RULE)

------
또한 RedHat9의 sort utility에는 버그가 있어서 느릴 수 있으므로
RedHat 7.3의 sort를 복사해서 쓰도록한다.

댓글 없음:

댓글 쓰기