지난 30분 동안의 로그 가져오기

지난 30분 동안의 로그 가져오기

현재 타임스탬프부터 30분 전 사이의 로그를 추출하고 싶습니다. 아래 스크립트를 개발했지만 제대로 작동하지 않습니다. 타임스탬프가 있는 줄만 표시하고 타임스탬프가 있는 줄 사이에 타임스탬프가 지정되지 않은 로그 줄을 가져와야 합니다. 다음 패턴이 포함된 로그 파일이 있습니다.

스크립트:

awk -v TSTART="$(date -v -30M "+%Y-%m-%d %H:%M")" -v TEND="$(date "+%Y-%m-%d %H:%M")" '$0>=TSTART && $0<=TEND' webservice_logs.log

로그 파일 모드:

답변1

첫 번째 필드가 날짜 필드인 경우에만 설정되는 플래그를 기반으로 행을 인쇄할 수 있습니다. pawk에게 행을 인쇄(when p==1)하거나 건너뛰도록(when p==0) 지시하는 플래그가 있는 다음 코드를 참조하세요.

awk -v tstart="$start" -v tend="$end" '
    /^[0-9]{4}-[0-9]{2}-[0-9]{2}/ {
        t = $1 " " $2
        p = t >= tstart && t <= tend ? 1 : 0
    }p' webservice_logs.log

ERROR 줄 시작 부분에는 타임스탬프가 없기 때문에 이 줄에는 플래그 변경이 없습니다.

편집하다한 줄에:

awk -v tstart="$start" -v tend="$end" '/^[0-9]{4}-[0-9]{2}-[0-9]{2}/{t = $1 " " substr($2,1,5); p = t >= tstart && t <= tend ? 1 : 0}p' webservice_logs.log

답변2

당신은 이것을 시도 할 수 있습니다

awk -vStartDate=`date -d'now-30 min' +%H:%M:%S` '{ if ($2 > StartDate) print $0}' web.log

관련 정보