| 2772 번 글의 답장글: Re: Re: 파일에서 원하는 날짜만... |
| 글쓴이: 김리
|
글쓴날: 2008년 06월 17일 08:24:56 화(오전) |
조회: 2453 |
지금 제가 근무하는곳이 모 통신사 IDC 내에서 DB 를
관리하는곳이라서
(당연히 쉘이 올라가는곳도 DB 서버)
php 로 돌리는것 자체가 허용이 안되네요.
java 로 짤려고 했었는데 그것도 안된다고 해서..ㅜㅜ
그래도 힌트 주셔서 감사드리고요..
소스 분석해서 한번 열심히 짜보겠습니다. ^^;
감사합니다.
[산이]님이 남기신 글:
>[김리]님이 남기신 글:
>
>>-----------------------------------------
>>답변자가 기본적으로 참고할 내용입니다.
>>- 배포판(옵션) :
>>- 커널버전(옵션)
:
>>- 데몬버전(예:apache
1.3.27) :
>>- 데몬설치유형(RPM/컴파일/기타)
:
>>-----------------------------------------
>>*스팸필터링:한글
4자(8개 문자) 이상 없으면 스팸페이지로 이동합니다.
>>
>>안녕하세요. ^^;
>>로그가 쌓이는 파일이 있습니다.
>>
>>파일내용에 보면 날짜가
>>-----------------------------
>>
>>Sat Jul 28 05:11:10 2001
>>ERROR- 어쩌구 저쩌구..
>>
>>------------------------------
>>
>>이런식으로 되어있습니다.
>>제가 원하는건 ERROR- 라는 문자가 있는 텍스트를 찾되
>>위에 날짜가 오늘것만.. 또는 언제 이후것만 찾고
싶은데
>>도저히 감이 안오네요.
>>
>>ex) sh searcherror.sh 0 <= 오늘것만 가져오기
>> sh searcherror.sh 3 <= 3일 이내것만 가져오기
>>
>>이런 형식인데요.. 어떤식으로 구현해야 할지 느낌이 잘
안오네요..ㅜㅜ
>
>========================================
>
>일단 쉘로 구현하기가 약간 까다로워 보이네요.
>perl 이나 php 또는 파이썬을 이용해서 라인단위로 읽어서 특정
문자열(ERROR)을 만나면 그 이전 라인을 파싱해서 출력하는
방식으로 구현해야 합니다.
>
>쉘로는
>
>tr "@" "_AT_" < logfile | tr "\n" "@" |
sed -e "s/@ERROR/ ;ERROR/g" | tr "@" "\n" | sed -e
"s/_AT_/@/g" | grep ERROR | grep -v grep
>
>이렇게 하면 ERROR 문자열을 포함한 라인과 바로 위의 라인을
한줄로 출력합니다.
>
>출력한 결과의 각 라인의 "Sat Jul 28 05:11:10 2001" 이것을
현재 시각과 비교해서 오늘것인지 어제것인지 비교 판단해야
하는데 shell 자체로 좀 까다롭네요.
>
>굳지 쉘로 하고자 한다면 php 의 도움을 받아야
합니다.
>
>
>LTIME=`/paht/to/php -r 'echo strtotime("Sat Jul 28 05:11:10
2001");'`
>
>이렇게 하면 $LTIME 변수에 unix timestamp 값이
저장됩니다.
>
>이 unix timestapm 값에 대한 날짜를 YYYYMMDD 형태는
>
>LDATE=`/path/to/php -r 'echo date("Ymd",$LTIME)';`
>
>이고,
>
>현재 시각에 대한 오늘 날짜는 DATE=`date '+%Y%m%d'` 이렇게
하면됩니다.
>
>또한 하루전은 DATE=`date --date '1 days ago' '+%Y%m%d'`
>
>$LDATE 와 $DATE 가 비교해서 같다면 해당 라인은 매치되는
경우이므로
>해당 라인을 echo 하면 되겠죠.
>
>
>그런데 이렇게 쉘로 짜는 것 보다는 차라니 php 를 전체를
짜는게 좋을 수 있습니다.
>
>..................
>
>-- searcherror.sh --------------
>#!/bin/sh
>
>
>BDATE=`date --date "$1 days ago" "+%Y%m%d"`
>IFS="
>"
>
>for LINE in `tr "@" "_AT_" < logfile | tr "\n"
"@" | \
> sed -e "s/@ERROR/ ;ERROR/g" | tr "@" "\n" |
\
> sed -e "s/_AT_/@/g" | grep ERROR | grep -v grep` ; do
>
> STIME=`echo $LINE | awk -F ';' '{print $1}'`
> LDATE=`/path/to/php -r 'echo
date("Ymd",strtotime("${STIME}"))';`
>
> if [ "${BDATE}" = "${LDATE}" ] ; then
> echo $LINE
> fi
>done
>exit $?
>---------------
>
>한번 테스트해 보시고 고쳐서 사용해 보세요. 실행해 보질
않았음.
========================================
|
이전글 : Re: 파일에서 원하는 날짜만...
다음글 : 3시간전 파일만 찾아서 각각 압축..?
|
from 203.229.169.253
JS(Redhands)Board 0.4 +@
|