Shell

將 csv 文件中的 datetime 列分別拆分為 MM/YYYY 和 time 列並寫入同一個 csv

  • September 14, 2018

我正在嘗試使用 awk,拆分然後列印但遇到錯誤

輸入:

id  day userId  itemId

1   12/1/17 8:32    2232    tv

2   1/12/18 10:18   3232    fdfs

3   2/9/18 10:50    232     fdsf

4   3/6/18 12:35    345456  fdg

預期產出

id  datetime    monthyear   time    userId  itemId

1   12/1/17 8:32    12/17   8:32    2232    tv

2   1/12/18 10:18   1/18    10:18   3232    fdfs

3   2/9/18 10:50    2/18    10:50   232     fdsf

4   3/6/18 12:35    3/18    12:35   345456  fdg

怎麼樣

awk -F"\t" '
NR == 1         {$2 = "datetime" OFS "monthyear" OFS "time"
               }
NR > 1          {split ($2, T, "[/ ]")
                $2 = $2 OFS T[1] "/" T[3] OFS T[4]
               }
1
' OFS="\t" file
id  datetime    monthyear   time    userId  itemId
1   12/1/17 8:32    12/17   8:32    2232    tv
2   1/12/18 10:18   1/18    10:18   3232    fdfs
3   2/9/18 10:50    2/18    10:50   232 fdsf
4   3/6/18 12:35    3/18    12:35   345456  fdg

RudiC 展示瞭如何轉換文件。要將其保存回同一文件:

  1. 使用 GNU awk:
gawk -i inplace '...' file
  1. spongemoreutils包中使用:
awk '...' file | sponge file    
  1. 或使用臨時文件
tmp=$(mktemp)
awk '...' file > "$tmp" && mv "$tmp" file

引用自:https://unix.stackexchange.com/questions/469075