(g)awk:在system()

时间:2018-10-17 14:37:04

标签: shell awk

在shell脚本中,我想修改一个以日期为值的一列(八列)的CSV文件(以“ |”作为字段分隔符)。

更准确地说,我想将每个日期增加一天:

10/06/2018变为10/07/2018

所以,我试图在gawk的system()中使用GNU的coreutils'date'命令(在Linux Mint环境中),但是我的输出是错误的(只是一列而不是整个文件,并且只有一个值)重复)。

awk -i inplace -F'|' -v OFS='|' '$8=system("date -d " $8+1days " +%m/%d/%y")' file.csv

由于在评论中恰如其分地指出,“日期”不是Bash的一部分,而是外部命令,所以我应该仍使用system()吗?

2 个答案:

答案 0 :(得分:3)

如果您使用的是gawk,则不需要系统调用

$ awk -i inplace 'BEGIN {FS=OFS="|"} 
                  {split($8,a,"/"); 
                   $8=strftime("%m/%d/%Y", mktime(a[3]" "a[1]" "a[2]" 00 00 00")+24*60*60)}1' file

答案 1 :(得分:0)

+1 days必须是system输入的一部分,并以此引用。同样,它也需要在shell级别引用。

awk -i inplace -F'|' -v OFS='|' '$8=system("date -d \""$8" +1 day\" +%d/%m/%y")' file.csv