두 번 사이의 행만 포함하도록 로그를 필터링하려면 어떻게 해야 합니까?

두 번 사이의 행만 포함하도록 로그를 필터링하려면 어떻게 해야 합니까?

나는 유닉스에서 일한다.

현재 날짜의 지정된 시간 범위 내의 로그에서 정보를 얻고 싶습니다. 예를 들어, 오늘 날짜 00:00부터 09:00까지의 로그 파일 데이터를 원합니다.

로그 항목 예시:

13/10/16 14:45:02 <batchspeedchange> <BELLBD.BD77350A.G6987V00> <> FAILED FILE FORMAT VALIDATION - ERROR:-213:rawData cannot contain tokens

이와 같은 로그 파일의 출력을 어떻게 얻을 수 있습니까?

답변1

표시할 때 날짜가 "HH:MM"과 같다고 가정하고 날짜가 두 번째 필드에 나타난다고 가정하면 awk를 사용할 수 있습니다.

awk -v start=00:00 -v stop=09:00 'start <= $2 && $2 < stop' file.log

[호언장담] 저는 날짜 형식에 대해 매우 까다롭습니다. 그런데 이건 형편없습니다. "09/10/11"은 무슨 요일인가요? [/노호]

어쨌든 "YY/MM/DD"라고 가정해 보겠습니다.

awk -v date="$(date +%y/%m/%d)" \
    -v start=00:00:00 \
    -v stop=09:00:00 \
    -v search="File format not found" \
'$1 == date && start <= $2 && $2 < stop && $0 ~ search' file.log

답변2

로그 파일의 줄이 시간순으로 되어 있고 00:00과 00:09에 이벤트가 있다고 가정합니다.

awk '/^13\/10\/16 00:00/,/^13\/10\/16 09:00/ {print}' file.log

나는 위의 내용을 기억하기 쉽고 로그를 조사할 때 훌륭한 도구라고 생각합니다. 이러한 가정은 프로덕션 환경에서 사용하기에는 너무 광범위합니다.

관련 정보