使用sed/awk删除分隔文本列的最后一部分
我有一个包含多行值的文件。第一列是PacBio读取ID,是一个正斜杠分隔的值。我想通过删除最后的斜杠和超出它的值来修改该列。理想情况下,结果将是流式的(sed/awk等),并且不依赖于正斜杠的数量(即,无论是单斜杠还是三斜杠,解决方案都应该有效,如下所示。)使用sed/awk删除分隔文本列的最后一部分,awk,sed,Awk,Sed,我有一个包含多行值的文件。第一列是PacBio读取ID,是一个正斜杠分隔的值。我想通过删除最后的斜杠和超出它的值来修改该列。理想情况下,结果将是流式的(sed/awk等),并且不依赖于正斜杠的数量(即,无论是单斜杠还是三斜杠,解决方案都应该有效,如下所示。) 如果您不介意稍微修改空白: awk '{sub("/[^/]*$","",$1)}1' input 如果空格很重要: sed 's@^\([^ ]*\)/[^ /]* @\1 @' input 如果您不介意稍微修改空白: awk '{s
如果您不介意稍微修改空白:
awk '{sub("/[^/]*$","",$1)}1' input
如果空格很重要:
sed 's@^\([^ ]*\)/[^ /]* @\1 @' input
如果您不介意稍微修改空白:
awk '{sub("/[^/]*$","",$1)}1' input
如果空格很重要:
sed 's@^\([^ ]*\)/[^ /]* @\1 @' input
Shortsed解决方案:
sed 's~/[^/[:space:]]* ~ ~' file
示例性输出:
m54151_170617_100137/4194626/10117_11723 1257 1606
-被视为sed子命令分隔符~
- Shortsed解决方案:
sed 's~/[^/[:space:]]* ~ ~' file
示例性输出:
m54151_170617_100137/4194626/10117_11723 1257 1606
-被视为sed子命令分隔符~
/
进行拆分
使用awk,您可以在/
上拆分,用/
重新连接字段,然后打印最后一个字段:
$ awk -F'/' '{s=""
for (i=1;i<NF;i++)
s=s ? s FS $i : $i
print s $NF}' file
$awk-F'/'{s=“”
对于(i=1;i如果字段中可能有空格,请使用/
进行拆分
使用awk,您可以在/
上拆分,用/
重新连接字段,然后打印最后一个字段:
$ awk -F'/' '{s=""
for (i=1;i<NF;i++)
s=s ? s FS $i : $i
print s $NF}' file
$awk-F'/'{s=“”
对于(i=1;i是你的价值观之间的标签还是其他什么?@EdMorton是这些标签是你的价值观之间的标签还是其他什么?@EdMorton是这些标签回答得很好。我给了Roman一个检查,因为我觉得它更容易理解。回答得很好。我给了Roman一个检查,因为我觉得它更容易理解。谢谢,但是此解决方案要求您知道子字符串长度,因此它不是通用的。谢谢,但此解决方案要求您知道子字符串长度,因此它不是通用的。