如何刪除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,但我已經提過。

相關內容