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