首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed/awk移除分隔文本列的最后一部分。

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

Stack Overflow用户
提问于 2017-07-06 15:53:11
回答 4查看 136关注 0票数 1

我有一个值行的文件。第一列PacBio读取ID是一个正斜杠分隔的值.我想通过删除最后的斜杠和超出它的值来修改该列。理想情况下,结果是可流的(sed/awk等)并且不依赖于正斜杠的数量(也就是说,无论是否有一个正斜杠,还是三个斜杠,解决方案都应该工作,如下所示)。

代码语言:javascript
复制
# example row
m54151_170617_100137/4194626/10117_11723/0_1606 1257    1606

# desired row
m54151_170617_100137/4194626/10117_11723    1257    1606
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-07-06 16:15:25

sed解决方案:

代码语言:javascript
复制
sed 's~/[^/[:space:]]* ~ ~' file

示范性产出:

代码语言:javascript
复制
m54151_170617_100137/4194626/10117_11723 1257    1606
  • ~ -作为sed子命令分隔符处理
票数 1
EN

Stack Overflow用户

发布于 2017-07-06 16:13:04

如果您不介意稍微修改一下空格:

代码语言:javascript
复制
awk '{sub("/[^/]*$","",$1)}1' input

如果空格重要:

代码语言:javascript
复制
sed 's@^\([^ ]*\)/[^ /]* @\1 @' input
票数 2
EN

Stack Overflow用户

发布于 2017-07-06 17:07:49

如果您的字段中可能有空格,请使用/拆分。

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

代码语言:javascript
复制
$ awk -F'/' '{s=""
             for (i=1;i<NF;i++)
                s=s ? s FS $i : $i
              print s $NF}' file

在Ruby中,这也是比较容易的:

代码语言:javascript
复制
$ ruby -F'/' -lane 'puts $F[0...-1].join("/")<<$F[-1]' file
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44953711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档