简体   繁体   中英

Format date in a column using awk

I just want to fix this problem. I am running the code below

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

$cat sample

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

The output is

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

My expected output:

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

Anyone who could help me with my code above?

你可能只需要

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

Instead of using gsub , you are better off using 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
  • We set the input and output field separator in the BEGIN block to , .
  • Using split , we break the forth field on - , : , . and space in to an array.
  • We then re-construct the forth field by concatenating the array elements.
  • 1 at the end will do default awk action, that is 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

or:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM