簡體   English   中英

使用date -d將時代前后的日期轉換為另一種格式時,Linux Shell腳本中的問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM