2016-04-26 135 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 

如果这是你需要的不是那么编辑问题包括一些更具真正代表性的样本投入和预期产出。