[英]Issues in linux shell script when converting pre and post epoch dates to another format using date -d
在Linux上的Shell腳本中使用date -d轉換日期時遇到一個大問題。
我的輸入數據是一個轉換為csv的excel文件,我對日期列感興趣,該列的日期格式與%b-%y相匹配。 IE瀏覽器
Jan-97
Feb-98
Mar-99
等等
我的問題是遇到這種格式的日期前的日期。 IE瀏覽器
Jan-66
Feb-67
Mar-68
我正在使用以下代碼轉換為%Y-%m-%d格式。
while read line
do
mydate=$(grep -Po '[\w]+-[0-9]+' <<< "$line") # gets jan-08
if [[ ! -z "$mydate" ]]; then #in case there is date to process
newtempdate=$(echo 01-"$mydate") # converts to 01-jan-08
newdate=$(date -d "$newtempdate" "+%Y-%m-%d") # converts to 2013-08-01
sed -i "s#$mydate#$newdate#" inputfile.csv # replaces in the text (-i option)
fi
done < inputfile.csv
使用上面的示例,結果是:
2066-01-01
2067-02-01
2068-03-01
1997-01-01
1998-02-01
1999-03-01
如您所見,它沒有正確處理紀元日期,因為它將其轉換為21世紀的日期,而不是正確地處理世紀。
我的願望是找到可以嚴格轉換的東西
%b-%y to %Y-%m-%d
我似乎沒有能力使用“日期”設置輸入格式,因此我無法告訴它正確處理時代變化。
我希望使用允許我解析輸入文件並吐出輸出文件的東西,或者像上面那樣修改現有文件,以便可以在批處理shell腳本中使用它。
由於我需要使流程自動化,因此無法手動修改excel文檔以更改列格式,除非有一種方法可以使它自動化(到目前為止我還沒有找到)。
有任何想法嗎?
好的,盡管我們認為這很容易,但看起來似乎不可能以編程的方式確定兩位數的世紀。
我將不得不退后一步,而是將源數據轉換為四位數的年份格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.