저는 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
에서 빼십시오 . future
90일에 포함된 초 수를 계산했으므로 future
이를 와 의 차이와 비교할 수 있습니다 now
.
if [ $((future - now)) -lt $ninety_days ]