使用sed / awk删除分隔文本列的最后一部分

时间:2017-07-06 15:53:12

标签: awk sed

我有一个包含值行的文件。第一列是PacBio读取ID,是一个正斜杠分隔值。我想通过删除最后的斜杠和超出它的值来修改列。理想情况下,结果可以是流(sed / awk等),并且不会依赖正斜杠的数量(即,无论是否存在单个正斜杠,解决方案都应该起作用,或者如下所示,则为三个。)

# example row
m54151_170617_100137/4194626/10117_11723/0_1606 1257    1606

# desired row
m54151_170617_100137/4194626/10117_11723    1257    1606

4 个答案:

答案 0 :(得分:2)

如果您不介意稍微修改空白:

awk '{sub("/[^/]*$","",$1)}1' input

如果空白很重要:

sed 's@^\([^ ]*\)/[^ /]* @\1 @' input

答案 1 :(得分:1)

sed 解决方案:

onsubmit: function (e) {
    // Insert content when the window form is submitted
              e.insertContent('Textbox content: ' + e.data.Field);
              e.insertContent('Listbox content: ' + e.data.Listbox)
}

示例性输出:

sed 's~/[^/[:space:]]* ~ ~' file
  • m54151_170617_100137/4194626/10117_11723 1257 1606 - 被视为 sed 子命令分隔符

答案 2 :(得分:1)

如果您的字段中可能包含空格,请使用/进行拆分。

使用awk,您可以在/上拆分,使用/重新加入字段,然后打印最后一个字段:

$ awk -F'/' '{s=""
             for (i=1;i<NF;i++)
                s=s ? s FS $i : $i
              print s $NF}' file

在Ruby中同样容易一些:

$ ruby -F'/' -lane 'puts $F[0...-1].join("/")<<$F[-1]' file

答案 3 :(得分:0)

awk '{print substr($1,1,40),$2,$3}' OFS="\t" file

m54151_170617_100137/4194626/10117_11723    1257    1606