我需要一些有关在 CSV 上就地转换日期的帮助。基本上,我能够转换列并保存在新文件中,但我无法将其保存在原始 CSV 中。
我有一个日期格式的 CSV,DD/MM/YYYY HH:MM
我想转换为YYYY-MM-DD HH:MM
,它是我的 CSV 的第一列。
我的 CSV 文件有这样的内容:
29/01/2018 14:07,payable,37159871,,30521316
29/01/2018 14:07,payable,37159872,,30521316
29/01/2018 14:07,payable,37159870,,30521316
29/01/2018 14:07,payable,37159869,,30521316
29/01/2018 14:07,payable,37159868,,30521316
我想要这样的东西:
2018-01-29 14:07,payable,37159871,,30521316
2018-01-29 14:07,payable,37159872,,30521316
2018-01-29 14:07,payable,37159870,,30521316
2018-01-29 14:07,payable,37159869,,30521316
2018-01-29 14:07,payable,37159868,,30521316
我能做的:
gawk -F, '{split($1, a, "/| "); print a[3]"-"a[2]"-"a[1]" "a[4]}' /path/to/file.csv > test_file
所以现在我想知道如何将它保存回我的 CSV 文件中。
这种情况下的编辑非常简单,我不会打扰 Awk。
使用 GNU Sed 很简单:
使用 BSD Sed,使用:
仅使用 POSIX 工具,它有点丑陋但并不可怕:
编辑:实际上,仔细查看POSIX 规范
ex
会发现(几乎)可以使用任何分隔符,就像在 Sed 中一样。所以:稍微好一点。
鉴于 awk 没有内置的“就地编辑”选项(通常作为幕后副本实现),并且自从阅读此答案以来,我在这种情况下的首选解决方案是以下形式:
对于您的情况:
请注意将
&&
命令联系在一起并仅在先前的命令成功时才执行后续命令的语法。由于您使用的是 GNU awk:
如果你想保留原件的备份
https://www.gnu.org/software/gawk/manual/html_node/Extension-Sample-Inplace.html#Extension-Sample-Inplace
我通过使用下面的 awk 命令实现了同样的目标
输入.csv
命令
输出