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 소스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/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 
[결과]
1
2
3
4
5
총 시간 : 약 5분 30초
====================
200903
23252
====================

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


3. Perl 원라이너 사용 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 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}++}<f>}END{print"$_\t$h{$_}\n" for sort keys %h}'
 
[결과]
총 시간 : 41초
200808  31324
200809  28933
</f>


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



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

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


Comments