如何删除vcf文件中特定模式后每一行的其余部分?

如何删除vcf文件中特定模式后每一行的其余部分?

如何:从 vcf 文件中的每一行中删除符号后的数字。例子:

0|0:0.81        0|1:0.81        0|0:0.76        0|0:0.83
0|1:0.99        0|0:0.03        0|0:0.83        0|0:0.2

输出应该是:

0|0        0|1        0|0        0|0
0|1        0|0        0|0        0|0

我已经尝试过以下操作,但它会删除第一个之后的所有内容:

sed 's/[:].*$//' file.vcf 

答案1

您想要从 中删除:,然后直接删除尽可能多的数字或点字符:

$ sed 's/:[0-9.]*//g' file.vcf
0|0        0|1        0|0        0|0
0|1        0|0        0|0        0|0

您还需要g在最后重复替换每行上的所有匹配子字符串。


你的命令,

sed 's/[:].*$//' file.vcf 

将匹配第一个:字符,然后到行尾任意数量的字符。这就是为什么你最终会得到

0|0
0|1

作为输出。

这个和我建议的表达式之间的区别是.(匹配任何单个字符),我将其更改为[0-9.]限制我们实际要删除的字符集。我们也无法将模式锚定到行尾,$因为我们还需要删除行中间的内容。最后g,但我已经提到过。

相关内容