awk -i inplace 导致文件为空

awk -i inplace 导致文件为空
168,1331122362,412482,,111,,3654

我有上面的 csv,第二列是时间戳。我需要将该时间戳转换为日期时间格式,我正在使用以下 awk 语句:

awk -i inplace -F"," '{OFS=","; $2=strftime("%Y-%m-%d %H:%M:%S", $2);}' file.csv

如果我删除 inplace 选项并添加“print$0”,它会按照我预期的方式工作,但是当使用 inplace 选项执行此操作时,它只会清空我的 csv 文件。我环顾四周,没有发现任何人有类似的问题,所以我假设我的陈述有问题,但我不知道它是什么。可能是因为我根本不熟悉 awk/sed 。

答案1

-i inplace当与 GNU 一起使用时awk,您将对给定文件进行就地编辑。它是awk写回到文件中的程序的输出。如果您的awk程序没有输出任何内容,该文件将被清空(这也是sed -iGNU 的工作方式sed)。

因此你应该使用

awk -i inplace -F ',' '{ OFS=","; $2 = strftime("%Y-%m-%d %H:%M:%S", $2); print }' file.csv

或者,为了避免OFS为每个输入行进行设置,

awk -i inplace -F ',' -v OFS=',' '{ $2 = strftime("%Y-%m-%d %H:%M:%S", $2); print }' file.csv

或者,更短,

awk -i inplace -F ',' -v OFS=',' '{ $2 = strftime("%F %T", $2) }; 1' file.csv

相关内容