쉘 스크립트에서 연도 매개변수 없이 날짜를 비교하는 방법은 무엇입니까?

쉘 스크립트에서 연도 매개변수 없이 날짜를 비교하는 방법은 무엇입니까?

Linux에는 다음과 같은 로그 파일이 있습니다.

Mar  2 09:46:45 [rest of the log]

Debian Linux의 많은 서비스 로그에는 연도 정보가 포함되어 있지 않기 때문에 내 생각에는 로그가 최근 이벤트를 암시하는 것 같습니다.

이 로그 줄이 마지막 10분인지 확인하고 싶어서 다음과 같이 했습니다.

Now="$(date '+%b %d %H:%M:%S')"
echo "Now : $Now"

TENMINSEC=$(date -d 'now - 10 minutes' '+%s')
echo "Ten min before : ${TENMINSEC}"

LOGDAT=$(date -d 'Mar  2 09:45:40' '+%s')
echo "LOGDAT : ${LOGDAT}"

if [ $LOGDAT -ge $TENMINSEC ];then 
    echo "Log date is greater"; 
fi

LOGDAT와 최근 10분을 초로 변환하여 비교합니다.

하지만 내가 원하는 일을 하고 있는지 혼란스럽죠? 연도 정보가 포함되지 않으면 결과에 영향이 없나요? 어떻게 해결할 수 있나요?

첨부된:

로그 파일 줄을 읽는 데 문제가 없습니다. 로그 파일에서 읽은 내용은 코드의 날짜(3월 2일 09:45:40)로 대체됩니다.

답변1

날짜 문자열에 연도가 지정되지 않으면 GNU date(사용 중인 것으로 보이는)는 날짜가 현재 연도를 참조한다고 가정합니다.

$ date -d 'Mar  2 09:45:40'
Sat Mar  2 09:45:40 CET 2019

따라서 이 날짜를 Unix 시간으로 변환하고 동일한 형식의 다른 날짜와 비교하는 것은 새해 전날이 자정쯤이라는 점을 제외하면 올바른 일을 할 것입니다.

답변2

특정 날짜에 대해 date 명령이 생성하는 내용이 확실하지 않은 경우 언제든지 시도해 볼 수 있습니다. 이 특정한 경우에는 삭제하여 +%s결과를 읽을 수 있습니다.

date -d 'Mar 2 09:45:40'    # "02 Mar 2019 09:45:40"

또는 epoch 이후의 시간(초)이 주어지면 값을 다시 읽을 수 있는 날짜로 변환할 수 있습니다.

time=1546300800
date --date "@$time"        # "01 Jan 2019 00:00:00"

관련 정보