2016-12-29 183 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