簡體   English   中英

使用awk重新格式化日期時間

[英]Reformatting date times with awk

我有一個像這樣的行的文件:

2012/04/08 15:00,207
2012/04/08 16:00,180

我想格式化日期,使文件看起來像:

08/04/2012 15:00,207

awk似乎是正確的工具,但我無法正確捕獲組。 我嘗試過以下內容( 使用sed或awk修復日期格式 ):

awk ' BEGIN { FS = OFS = "," } { split($1, date, /\\// ) $1 = date[3] "-" date[2] "-" date[1] " " date[4] print $0 } ' $FILE

但它留下了這樣的數據:

08 15:00-04-2012,207

Awk的分裂顯然將時間解釋為日期字符串的年份字段的一部分,我似乎無法找到將其分開的方法。 我在split delimiter字段中嘗試了許多不同的東西,例如冒號或轉義空格,但都給出了語法錯誤。 看過awk split的文檔,並沒有被它啟發。

$ awk '{split($1,date,"/"); print date[3] "/" date[2] "/" date[1], $2}' file
08/04/2012 15:00,207
08/04/2012 16:00,180

僅供參考,GNU awk或sed用於捕獲組:

$ awk '{print gensub(/(....)\/(..)\/(..)/,"\\3/\\2/\\1",1)}' file
08/04/2012 15:00,207
08/04/2012 16:00,180

$ awk 'match($0,/(....)\/(..)\/(..)(.*)/,a){ print a[3]"/"a[2]"/"a[1] a[4] }' file
08/04/2012 15:00,207
08/04/2012 16:00,180

$ sed -r 's#(....)/(..)/(..)#\3/\2/\1#' file
08/04/2012 15:00,207
08/04/2012 16:00,180

這是一個使用正則表達式fieldsplitting的解決方案,方法是將FS設置為正則表達式,將時間戳分開,然后重新組合它:

awk '
  BEGIN { FS= "[/ ]"; }
  {print $3 "/" $2 "/" $1 " "  $4 ;}
' file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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