파일에서 날짜 읽기 및 변환

파일에서 날짜 읽기 및 변환

저는 CentOS를 사용하고 있으며 쉘 스크립트를 작성하고 싶습니다. 그래서

날짜가 포함된 파일이 있습니다.

> 
> cat VM1_EOMAP_TIME.log
07 Sep 2022 16:30
> 

현재 시간 이후의 분과 파일의 날짜를 가져오고 싶습니다.

내 생각은 다음과 같습니다: ("현재 시간부터 시작하는 시대" - "이 파일의 날짜부터 시작하는 시대")/60

하지만 "현재 시대의 신기원"을 얻을 수 없습니다

> cat VM1_EOMAP_TIME.log
07 Sep 2022 16:30
 
> date --date='07 Sep 2022 16:30' +%s
1662568200
 
> date --date=$(cat VM1_EOMAP_TIME.log) +%s  
date: extra operand ‘2022’
Try 'date --help' for more information.

> date --date=`cat VM1_EOMAP_TIME.log` +%s
date: extra operand ‘2022’
Try 'date --help' for more information.

> TTT="07 Sep 2022 16:30"
> echo $TTT
07 Sep 2022 16:30

> date --date=$TTT +%s
date: extra operand ‘2022’
Try 'date --help' for more information.

"날짜: 추가 피연산자 '2022'" 오류가 발생하는 이유는 무엇입니까?

답변1

bash가 최근인 경우 현재 시간(epoch 초)이 내장되어 있습니다.$EPOCHSECONDS

그렇지 않으면 bash의 printf는 %(fmt)T지시문과 마법 값 "-1"을 사용하여 이를 얻을 수 있습니다:

printf -v current_epoch '%(%s)T' -1

또한 bash에는 편의 기능이 내장되어 있습니다 $(cat file)=> $(<file):

log_epoch=$( date -d "$(<VM1_EOMAP_TIME.log)" "+%s" )

답변2

문제는 따옴표에 있습니다. date -u시간대를 보상하려면 이를 사용해야 합니다 .

$ echo "07 Sep 2022 16:30" > infile
$ var="$(<infile)"
$ cat infile; echo "$var"
07 Sep 2022 16:30
07 Sep 2022 16:30

$ date -ud "$(<infile)" ;   date -ud "$var" +%s
1662568200
1662568200

$ varlog=$(date -ud "$var" +%s)    #capture value for later

Bash에는 다른 더 간단한 솔루션이 있습니다:

$ echo "$EPOCHSECONDS"; printf '%(%s)T' '-1'
1662582600
1662582600

$ var1="$EPOCHSECONDS"; printf -v var2 '%(%s)T' '-1'
$ echo "$var1 $var2"
1662568200 1662568200

따라서 최종 수학은 다음과 같습니다.

$ echo $((var2 - varlog))
10747

$ echo $(((var2-varlog)/60))
179

관련된

답변3

$ let diff=($(date +%s -d 'today')-$(date +%s -f VM1_EOMAP_TIME.log))/60
$ echo "$diff"

관련 정보