/var/log/messages에서 타임스탬프 사이의 행 범위를 가져옵니다.

/var/log/messages에서 타임스탬프 사이의 행 범위를 가져옵니다.

/var/log/messages에서 두 타임스탬프 사이의 모든 줄을 가져오고 싶습니다. 시작 시간만 갖고 스크립트에 입력으로 제공합니다. 그러면 스크립트를 통해 다음 날 이전의 모든 행을 출력으로 얻을 수 있습니다. 나는 이것을 시도했다 -

startDate=$1
toDate=`date -d "${startDate}+1day"`
sed -n '/${startDate}/ , /${toDate}/p' messages* 

$toDate그러나 메시지 로그에서 패턴을 찾을 수 없을 때 이 접근 방식에 문제가 있음을 발견했습니다. 그래서 코드를 이렇게 수정했습니다.

startDate=$1
toDate=`date -d "${startDate}+1day"`
until [ `grep -Fxq ${toDate} messages*` ];
do
    echo ${toDate}
    epoch=`date -d "${toDate}" +%s`
    new_epoch=$(($epoch+1))
    next_ts=`date -d "1970-01-01 ${new_epoch} sec"`
    toDate=${next_ts:4:15}
done
sed -n '/${startDate}/ , /${toDate}/p' messages* 

이제 로그의 날짜를 일치시키는 데 문제가 있습니다. 내 입력에 대해 Nov 6 07:17:04 UTC 2017코드는 다음 날짜를 Nov 7 07:17:04. 메시지 로그의 실제 타임스탬프에는 월 이름과 단위 날짜 사이에 두 개의 공백이 포함되어 있습니다. 그래서 문자열을 일치시킬 수 없습니다.

이 문제를 해결할 방법이 있나요? 스크립트가 두 자리 날짜(예: 10)도 처리하기를 원합니다.

관련 정보