DATA 전문가로 가는 길

[Perl] 원라이너 디렉토리 안에 문자열을 찾아 각 월별 건수 확인 본문

Programming/Perl

[Perl] 원라이너 디렉토리 안에 문자열을 찾아 각 월별 건수 확인

EstenPark 2009. 3. 26. 21:05


aero, pung96님 도음으로 원라이너에 대해서 이해할 수 있었고, 정확한 정보를 얻을 수 있었습니다. 일반적인 Shell과 Perl에서 사용하는 원라이너를 응용한 사례를 적절하게 활용해보시면 되고, 각각 어느 정도 시간이 걸리는 지 파악 할 수 있습니다.


1. 디렉토리안에 속한 파일명 확인

  - 현재 서버에는 YYYYMMDD로 디렉토리가 생성되어있고 그안에 data.log파일이 있습니다. 그래서 data.log 파일 내에 "res=[0]" 문자열이 들어있는 개수를 구해야 했습니다. 단, 조건이 있습니다. YYYYMM의 총 건수를 조합하는 문제입니다.

 디렉토리  파일명  원하는 문자열
 YYYYMMDD  data.log  res=[0]

2. csh 소스

#!/bin/csh 

cd /log 

set log_file = data.log 
set chk_dir = (`ls -d 200[0-9]* | perl -pe 's/\///g' | awk '{printf"%s\n", substr($0,1,6)}' |uniq`) 

@ i = 1 

while ( $#chk_dir >= $i ) 
echo ==================== 
echo $chk_dir[$i]; 
#grep 'ret\=\[0\]' $chk_dir[$i][0-3][0-9]/$log_file |wc -l 
grep 'res\=\[0\]' $chk_dir[$i]*/$log_file |wc -l 
@ i++ 
echo ==================== 
end  
[결과]
총 시간 : 약 5분 30초
====================
200903
23252
====================

원하는 결과를 얻었지만 너무 긴 시간과 CPU/MEM을 많이 사용한다는 단점을 발견 했습니다. 그래서 다시 한번 문의를 드렸고 시원한 결과를 얻을 수 있었습니다.


3. Perl 원라이너 사용 방법

# pung96

find $PWD -name data.log | xargs perl -ne'$ARGV=~/(200\d{5})/ and $d=$1;/res=\[0\]/&&$h{$d}++;}{print "$_\t$h{$_}\n" for sort keys %h'

[결과]
총 시간 : 29초
20080801        1876
20080802        529
20080803        342
20080804        2286

# aero

perl -e 'for(<*/data.log>){open F,$_;$_=~/(200\d{3})\d\d/ and $k=$1;map{/res=\[0\]/ and $h{$k}++}}END{print"$_\t$h{$_}\n" for sort keys %h}'

[결과]
총 시간 : 41초
200808  31324
200809  28933


Perl을 활용한 명령어 사용이 얼마나 유용한지 알 수 있었으며,  aero님과 pung96님에게 감사드립니다.



참고 자료
================================================================================

             사이트                                                      이름
================================================================================
http://aero.springnote.com/                                                       (aero님)
http://perlog.pung96.net/                                                         (pung96님)
http://cafe.naver.com/perlstudy.cafe                                 (대한민국Perl커뮤니티)
================================================================================


Comments