Date

從文件名中獲取日期、月份、年份並將其轉換為日期格式

  • February 22, 2021

我有一個名為 data_extraction_check_03_02_2021.txt 的文件。我試圖從按日期、月份和年份順序排列的文件名中獲取最後三個值。之後,我需要連接三個變數並將其轉換為日期格式,以便找出該日期與目前日期之間的天數。

使用以下命令,我得到最後一個文件名,即“data_extraction_check_03_02_2021.txt”。

latest_file=$(ls -t | head -n 1)
echo $latest_file

我正在嘗試使用以下命令獲取 date_last、month_last 和 year_last,但出現錯誤“date_last:command not found”

date_last = echo "${latest_file}" | awk -F'[_.]' '{print $4}'
month_last = echo "${latest_file}" | awk -F'[_.]' '{print $5}'
year_last = echo "${latest_file}" | awk -F'[_.]' '{print $6}'

之後,我使用以下命令連接 date_last、month_last 和 year_last。不知道如何將其轉換為日期格式。

last_extracted_date=$(echo ${date_last}-${month_last}-${year_last})

你的任務是錯誤的。之前或之後不能有任何空格字元,並且缺少=命令替換,例如$(...)

date_last=$(echo "${latest_file}" | awk -F'[_.]' '{print $4}')

使用 GNU date,您可以像這樣計算天數:

date=$(echo "$latest_file" | awk -F'[._]' '{ print $6 "-" $5 "-" $4 }')
days=$(( ($(date +%s) - $(date +%s -d "$date")) / 86400 ))
echo "$days"

zsh

zmodload zsh/datetime

(){ latest=$1; } *_<1-31>_<1-12>_<1970->.txt(om)
strftime -rs t _%d_%m_%Y.txt ${(M)latest%_*_*_*}
strftime 'Date is %F' $t
print Age is $(( (EPOCHSECONDS - t) / 86400 )) days.

今天(2021-02-22)對我來說:

Date is 2021-02-03
Age is 19 days.

引用自:https://unix.stackexchange.com/questions/635859