【发布时间】:2018-10-17 14:37:03
【问题描述】:
在一个 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
因为,正如 cmets 中公正指出的那样,'date' 不是 Bash 的一部分,而是一个外部命令,我还应该使用 system() 吗?
【问题讨论】:
-
date是外部命令,与bash无关。 -
另外,你的日期格式是什么?如果 2018 年 7 月 10 日比 2018 年 6 月 10 日晚一天,那么您似乎并没有真正使用
%d/%m/%y。让我们借此机会切换到 ISO8601 日期。派对就像 1988 年一样! -
另请注意,
date命令的用法和选项因操作系统而异。如果您想要一个可以在您的操作系统中运行的解决方案,最好包括什么操作系统,因为列表答案必然会受到更多限制。 -
我正在研究一种 UNI EN 28601 格式,但由于日期(据我所知)只接受 mm/dd/yyyy,我用以前的命令转换了那个格式……忘了在此处更改。