将csv文件中的日期时间列分别拆分为MM/YYYY和时间列并写入同一个csv

将csv文件中的日期时间列分别拆分为MM/YYYY和时间列并写入同一个csv

我正在尝试使用 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

答案1

怎么样

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

答案2

RudiC 展示了如何转换文件。要将其保存回同一文件中:

  1. 使用 GNU awk:

    gawk -i inplace '...' file
    
  2. 使用spongemoreutils包装中:

    awk '...' file | sponge file    
    
  3. 或者使用临时文件

    tmp=$(mktemp)
    awk '...' file > "$tmp" && mv "$tmp" file
    

相关内容