将日期从ISO时间格式转换为yyyy / mm / dd.hh:mm:ss

时间:2013-08-19 14:20:20

标签: regex linux csv

我如何转换它:

2013-08-16T13:24:18+0200

从当前格式yyyy-mm-ddThh:mm:ss+hhmm到此格式?

yyyy/mm/dd.hh:mm:ss2013/08/18.13:24:18

值在csv文件中,并且还有负值,所以我不能只用正斜杠替换连字符,我也想要指定时区被删除的部分。 我对sed和awk的了解非常基础。

1 个答案:

答案 0 :(得分:1)

拆分CSV可能非常棘手,具体取决于是引用所有内容还是引用任何内容,或引用某些字段。然后,我们可以开始担心你的字符串中是否存在转义引号。或者字符串中的逗号。

在不知道你的数据的情况下(可能你的字符串中没有逗号而且没有引号可以担心),你可能会也可能不会使用sed / awk。如果你有复杂的CSV,我建议像perl和Text :: CSV这样的东西。

因此,我将向您展示如何解析 Just dates 的文件,以便将CSV复杂性排除在外。

perl方式:

cat tmp.txt | perl -e 'for (<>){ s!(\d+)\D(\d+)\D(\d+)T(\d+)\D(\d+)\D(\d+)\+.*!$1/$2/$3.$4:$5:$6!; print $_}'

SED方式:

sed -r 's!([0-9]+)\D([0-9]+)\D([0-9]+)T([0-9]+)\D([0-9]+)\D([0-9]+)\+.*!\1/\2/\3.\4:\5:\6!' tmp.txt