我尝试了在我的问题中提供的各种解决方案,但我的解决方案似乎是重复的。其中一些实际上并没有转换时间,其中一个确实转换了时间,但年份错误,并且它没有替换文件中的现有值,而是在输出中添加了一个新列。我在下面接受的答案完全满足了我的需求。
抱歉,如果这是重复的,我进行了大量搜索,但没有找到符合我情况的问题。我经常使用 Linux,但我的“编程”技能仅限于简单的 shell 脚本。
我有一个 csv 文件,其中有一列以纪元(即 Unix)格式编写的日期/时间戳。请参阅下面的示例。我想用 ISO 8601 格式转换并替换 Unix 时间。
现有输出示例:
foo, 1439856000000000000, foo, foo
foo, 1439856360000000000, foo, foo
foo, 1439856720000000000, foo, foo
foo, 1439857080000000000, foo, foo
所需输出的示例:
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
foo, YYYY-MM-DD HH:MM:SS.nnnnnnnnn, foo, foo
答案1
我会用perl
:
perl -MPOSIX -pe 's{\b\d{10}(?=\d{9}\b)}{
strftime("%Y-%m-%d %T.", localtime $&)}ge'
(这里给出的是当地时间,gmtime
而不是localtime
GMT 时间)