bash:將 iso 日期轉換為 d:m:y

bash:將 iso 日期轉換為 d:m:y

我有一個程序,它產生這樣的輸出(iso 格式日期):

2010-06-04 15:48:17 +0200
2010-06-04 12:34:39 +0200
2010-02-01 14:02:44 +0200
2010-06-04 12:21:19 +0200
2010-06-04 12:21:04 +0200
2009-05-02 15:38:14 +0200
2009-03-02 15:38:09 +0200
2010-06-04 14:45:00 +0200
...

如何將輸出轉換為唯一的排序日期:

2010-06-04
2010-02-01
2009-05-02
2009-03-02

然後,在每個唯一的日期運行:mycommand --withargs [yyyy-mm-dd]?

答案1

您可以執行以下操作:

$ <iso_command> | awk '{print $1}' | sort -u | xargs -n 1 mycommand --withargs

答案2

如果您要從其他時區取得數據,那麼使用簡單的文字解析工具可能不是最好的方法。

將格式化的字串傳遞到日期命令,然後使用它重新格式化,只要你喜歡。簡單的 awk 或 cut 可能會回傳不完全準確的結果。例如,如果您所在的位置採用 PST,但您取得的資料採用 UTC,則資料期間的 24 小時內的日期會偏差七分之一。

$echo '2010-06-04 15:48:17 +0200' | xargs -I var_d date --date='var_d' +%Y-%m-%d
2010-06-04

答案3

cut -c 1-10 -|sort -ru

或者

cut -c 1-10 /path/to/myfile |sort -ru

答案4

假設date從 GNU coreutils 來看,

program > dates
while read isodate; do
    ymd=$(date -d "$isodate" +'%Y-%m-%d')
    mycommand --withargs "$ymd"
done < dates

相關內容