날짜 문자열(예: 2017년 7월 20일)을 에포크로 변환하고 Linux에서 비교

날짜 문자열(예: 2017년 7월 20일)을 에포크로 변환하고 Linux에서 비교

저는 ksh를 사용하고 있으며 다음과 같은 몇 줄이 포함된 텍스트 파일이 있습니다. 날짜 부분을 현재 날짜와 비교하여 일수 차이를 찾은 다음 파일의 "Server" 및 "Qmgr" 부분을 다른 파일로 출력하려고 합니다.

이것은 내 입력 파일입니다.

server1        :       Qmgr1      :       20 July 2017
server2        :       Qmgr2      :       22 July 2017
server3        :       Qmgr3      :       22 Dec 2015

현재 날짜와 파일 날짜의 차이가 90일 미만인 경우 예상되는 출력은 다음과 같아야 합니다.

서버 3: Qmgr3

아마도 가장 쉬운 방법은 무엇입니까?

답변1

이 시도. 스크립트는 명령줄이나 표준 입력에 나열된 파일을 읽고 각 줄에 대한 서버 및 qmgr 값을 인쇄합니다. 여기서 날짜는 향후 90일 이하입니다.

#!/bin/sh

# also works with ksh, bash, zsh

now=$(date +%s)
ninety_days=$(( 90 * 24 * 60 * 60 ))

cat "$@" |
while read server colon qmgr colon2 qdate
do
    future=$(date +'%s' -d "$qdate")
    if [  $((future - now))  -lt  $ninety_days  ]
    then
        echo "$server $colon $qmgr"
    fi
done

설명하다:

"epoch"(1970-01-01 UTC)와 현재 시간 사이의 초 수를 변수에 저장합니다 now.

now=$(date +%s)

90일 동안의 초 수를 계산합니다.

ninety_days=$(( 90 * 24 * 60 * 60 ))

레코드의 마지막 3개 필드에서 읽은 날짜를 Epoch와 해당 날짜 사이의 초 수로 변환합니다. 변수에 저장됨 future(변수와 비교할 때 명확성을 위해 이러한 이름 지정 now):

    future=$(date +'%s' -d "$qdate")

현재 날짜와 파일의 날짜 사이의 초 수를 얻으려면 now에서 빼십시오 . future90일에 포함된 초 수를 계산했으므로 future이를 와 의 차이와 비교할 수 있습니다 now.

    if [  $((future - now))  -lt  $ninety_days  ]

관련 정보