오늘은 대한입니다.
sun's longitude:299 56 46.62 
· 자유게시판 · 묻고답하기 · 알파문서 · RPMS list
· 사용자문서 · 팁/FAQ모음 · 리눅스Links · 자료실
· 서버정보 · 운영자 · Books/FAQ · FreeBSD
/board/read.php:소스보기  

질문과 답변 게시판입니다.

현재 실시간으로 이곳 서버의 설정파일(몇개)를 보여주고 있습니다.
서버의 설정내용에 관한 질문은 먼저 이곳 서버의 설정내용을 참고하시길 바랍니다.

[*** 쓰기 금지단어 패턴 ***]
글 본문 중간에 업로드할 이미지를 추가하는 방법 : @@이미지이름@@
ex) @@foo.gif@@
2772 번 글의 답장글: Re: 파일에서 원하는 날짜만...
글쓴이: 산이 [홈페이지] 글쓴날: 2008년 06월 17일 04:14:32 화(새벽) 조회: 2574
[김리]님이 남기신 글:

>-----------------------------------------
>답변자가 기본적으로 참고할 내용입니다.
>- 배포판(옵션)    : 
>- 커널버전(옵션)
  : 
>- 데몬버전(예: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: Re: 파일에서 원하는 날짜만...  
 from 211.108.72.38
JS(Redhands)Board 0.4 +@

파일에서 원하는 날짜만... Re: Re: 파일에서 원하는 날짜만...
인쇄용 


apache lighttpd linuxchannel.net 
Copyright 1997-2026. linuxchannel.net. All rights reserved.

Page loading: 0.01(server) + (network) + (browser) seconds