我有一个值行的文件。第一列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发布于 2017-07-06 16:15:25
短sed解决方案:
sed 's~/[^/[:space:]]* ~ ~' file示范性产出:
m54151_170617_100137/4194626/10117_11723 1257 1606~ -作为sed子命令分隔符处理发布于 2017-07-06 16:13:04
如果您不介意稍微修改一下空格:
awk '{sub("/[^/]*$","",$1)}1' input如果空格重要:
sed 's@^\([^ ]*\)/[^ /]* @\1 @' input发布于 2017-07-06 17:07:49
如果您的字段中可能有空格,请使用/拆分。
使用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]' filehttps://stackoverflow.com/questions/44953711
复制相似问题