我有一个标签分隔的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
答案 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
如果这不是您所需要的,那么请编辑您的问题,以包含一些更具真实代表性的样本输入和预期输出。