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 -i
GNU 的工作方式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