2016-12-29 157 views
0

我有大量的文件,其中每个字符串是不正确的日期格式的json。我现在的格式是2011-06-02 21:43:59,我需要做的是在中间添加T将其转换为ISO格式2011-06-02T21:43:59awk更改日期时间格式

有人可以请我指点一下一个班轮解决方案吗?这是2小时挣扎,但没有运气。

+3

显示样品,文件5个或10个项目应该是足够。 – Lizardx

+1

向我们展示一个示例文件! – NinjaGaiden

+1

目前还不清楚_“每个字符串是json的文件数量”是什么意思。你的意思是每个文件都包含多个JSON对象吗? –

回答

0

下面似乎是工作溶液:

sed -i -r 's/([0-9]{4}-[0-9]{2}-[0-9]{2}) ([0-9]{2}:[0-9]{2}:[0-9]{2})/\1T\2/g' myfiles

  • -i处理文件
  • -r是对扩展正则表达式
  • ([0-9]{4}-[0-9]{2}-[0-9]{2})切换 - 是日期
  • - 日期和时间之间的空白源数据
  • ([0-9]{2}:[0-9]{2}:[0-9]{2}) - 是时候
1

sed会来拯救你,用一个简单的regex

sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\) /\1T/g' file > file.new 

,或者修改的地方文件:

sed -i 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\) /\1T/g' file 

echo '2011-06-02 21:43:59' | sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\) /\1T/g' 
2011-06-02T21:43:59 

阅读更多关于正则表达式的信息:Regex Tag Info

+0

这似乎不起作用,请参阅我的解决方案。 –

+0

@ mr.nothing:它为我工作(在Ubuntu 12.04上试用过)。你得到的错误是什么?我在我的回答中发布了一个示例输出。 – codeforester

0

还与awk,你可以用gensub匹配组:

awk '{ 
    print gensub(/([0-9]{4}-[0-9]{2}-[0-9]{2})\s+([0-9]{2}:[0-9]{2}:[0-9]{2})/, 
     "\\1T\\2", 
     "g"); 
}' data.txt 
0
echo '2011-06-02 21:43:59' | awk 'sub(/ /,"T")' 
2011-06-02T21:43:59