簡體   English   中英

使用 awk 格式化列中的日期

[英]Format date in a column using awk

我只是想解決這個問題。 我正在運行下面的代碼

 awk -F, 'NR>1{gsub(/\:/,"",$4);gsub(/\-/,"",$4);gsub(/\.0/,"",$4);gsub(/\ /,",",$4);NF--}{$1=$1}1' OFS=, sample

$cat 樣本

 1,0,null,2014-11-24 08:15:18.0,1
 1,0,null,2014-11-24 08:15:16.0,1

輸出是

1,0,null,2014-11-24 08:15:18.0,1
1,0,null,20141124,081516

我的預期輸出:

1,0,null,20141124,081518,1
1,0,null,20141124,081516,1

誰能幫我上面的代碼?

你可能只需要

awk -F, '{gsub(/[-:]/,"",$4);sub(/ /,OFS,$4);sub(/\.0$/,"",$4)}1' OFS=, sample
#!/usr/bin/awk -f
$1 {
  gsub(/(\.0|[-:])/, "")
  gsub(/ /, ",")
  print
}

而不是使用gsub ,你最好使用split

awk '
BEGIN { FS = OFS = "," }
{
    split ($4, flds, /[- :.]/);
    $4 = flds[1] flds[2] flds[3] FS flds[4] flds[5] flds[6]
 }1' sample
1,0,null,20141124,081518,1
1,0,null,20141124,081516,1
  • 我們將BEGIN塊中的輸入和輸出字段分隔符設置為,
  • 使用split ,我們在- , : , 上split第四個字段. 並將空間放入數組。
  • 然后我們通過連接數組元素重新構造第四個字段。
  • 1最后會做默認的awk動作,即print
$ awk 'BEGIN{FS=OFS=","} {gsub(/[-:]|\.0/,"",$4); sub(/ /,OFS,$4)} 1' file
1,0,null,20141124,081518,1
1,0,null,20141124,081516,1

或者:

$ awk 'BEGIN{FS="[ ,]";OFS=","} {gsub(/-/,"",$4); gsub(/:|\.0/,"",$5)} 1' file
1,0,null,20141124,081518,1
1,0,null,20141124,081516,1

暫無
暫無

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

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