转换csv中的timestamp列

时间:2016-04-26 13:24:14

标签: bash shell awk sed

我有一个标签分隔的csv。行如下所示:

57760234    some@email.com  3791    text_value  2016-04-25 07:56:59+02  2
57767500    some@email.com  3784    text_value  2016-04-25 07:30:49+02  2

如何从所有行的 timestamp 列中删除 +02 (我认为它可以是任何数字,而不仅仅是+02)位?

P.S。如果我在一行中有两个时间戳,该怎么办?喜欢

57760234    some@email.com  3791    text_value  2016-04-25 07:56:59+02  2016-04-25 07:56:59+02  2  

3 个答案:

答案 0 :(得分:2)

试试这个单行,我没有测试,但应该工作

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

答案 1 :(得分:1)

试试这个:

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

在这里,我使用regexp将行尾的+02 2替换为2

重要提示:它可以在加号后使用任何数字,但重要的是有这个加号,没有它就行不通。

更新:

  

P.S。如果我在一行中有两个时间戳,该怎么办?像

在这种情况下,它不起作用,您可以使用另一种方法,即基于将日期替换为时间戳的日期而不是它:

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

但日期应采用07:56:59+02

之类的格式

答案 2 :(得分:0)

由于+后跟一个数字并未出现在任何其他字段(列)中,因此我们不必担心我们会影响哪个字段:

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

如果这不是您所需要的,那么请编辑您的问题,以包含一些更具真实代表性的样本输入和预期输出。