![지난 30분 동안의 로그 가져오기](https://linux55.com/image/151624/%EC%A7%80%EB%82%9C%2030%EB%B6%84%20%EB%8F%99%EC%95%88%EC%9D%98%20%EB%A1%9C%EA%B7%B8%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0.png)
현재 타임스탬프부터 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
첫 번째 필드가 날짜 필드인 경우에만 설정되는 플래그를 기반으로 행을 인쇄할 수 있습니다. p
awk에게 행을 인쇄(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