2016-04-26 128 views
0

我有一個用csv分隔的選項卡。該行看起來像以下:在csv中轉換timestamp列

57760234 [email protected] 3791 text_value 2016-04-25 07:56:59+02 2 
57767500 [email protected] 3784 text_value 2016-04-25 07:30:49+02 2 

我如何刪除+02(我假設它可以是任何數字,不僅+02)位來自時間戳列所有行?

P.S.如果我在那裏有兩個時間戳在一行?像

57760234 [email protected] 3791 text_value 2016-04-25 07:56:59+02 2016-04-25 07:56:59+02 2 

+0

那不是UTC偏移量嗎?這似乎是時間戳的一個非常重要的部分。 –

+0

是的,那是一個UTC偏移量。然而,在目前的邏輯中,他們只是擺脫它,所以我雖然我只是順其自然。 – Dennis

+1

wrt'如果我在那裏有兩行時間戳記?' - 那麼你會編寫代碼來處理它們,但是你希望它們被處理。如果您希望獲得幫助,那麼至少應該提供給定輸入的預期輸出。 –

回答

2

給這個只有一行一試,我沒有測試,但應該工作

awk 'BEGIN{FS=OFS="\t"}{sub(/[+][0-9]+$/,"",$(NF-1))}7' file 
+0

謝謝肯特。對我很好。 – Dennis

+0

請您看看這個小小的更新,沒有考慮到從開始的所有情況 - – Dennis

+0

@ Dennis如果'+ 02'可以在**某個**列的末尾( s)或**任何**欄(s)。有什麼要求?刪除所有列中的任何「+ 02」後綴?或者只在x和y列中刪除? – Kent

1

試試這個:

sed -i 's|+[0-9]\+\([[:space:]]\+[0-9]\+\)$|\1|' file 

在這裏,我用在正則表達式的結束,以取代+02 2 line to just 2

重要提示:它可以在加號後使用任何數字,但重要的是要有這個加號,否則它不起作用。

更新時間:

附:如果我在那裏有兩個時間戳在一行?像

在這種情況下它不會工作,你可以使用另一種方法,是基於按日期與時間戳更換日期沒有它:

sed -i 's|\([0-9]\+:[0-9]\+:[0-9]\+\)+[0-9]\+|\1|g' file 

但日期應該是像格式07:56:59+02

+0

我雖然完全擺脫它:) – Dennis

+0

是的,這將刪除它,但我們需要保留最後一列,對吧? –

+0

噢,對,它也是2 :) – Dennis

0

由於+後跟一個數字在任何其他字段(列)不會發生,我們不擔心我們影響哪些領域:

$ cat file 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59+02 2 
57767500 [email protected] 3784 text_value 2016-04-25 07:30:49+02 2 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59+02 2016-04-25 07:56:59+02 2 
$ 
$ sed 's/+[0-9]*//' file 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2 
57767500 [email protected] 3784 text_value 2016-04-25 07:30:49 2 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2016-04-25 07:56:59+02 2 
$ 
$ sed 's/+[0-9]*//g' file 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2 
57767500 [email protected] 3784 text_value 2016-04-25 07:30:49 2 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2016-04-25 07:56:59 2 
$ 
$ awk '{sub(/+[0-9]*/,"")}1' file 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2 
57767500 [email protected] 3784 text_value 2016-04-25 07:30:49 2 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2016-04-25 07:56:59+02 2 
$ 
$ awk '{gsub(/+[0-9]*/,"")}1' file 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2 
57767500 [email protected] 3784 text_value 2016-04-25 07:30:49 2 
57760234 [email protected] 3791 text_value 2016-04-25 07:56:59 2016-04-25 07:56:59 2 

如果這是你需要的不是那麼編輯問題包括一些更具真正代表性的樣本投入和預期產出。