Como deletar o restante de cada linha após um determinado padrão em um arquivo vcf?

Como deletar o restante de cada linha após um determinado padrão em um arquivo vcf?

Como remover os dígitos após :entrar em cada linha de um arquivo vcf. Exemplo:

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

A saída deve ser:

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

Eu tentei o seguinte, mas remove tudo depois do primeiro:

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

Responder1

Você deseja excluir do e :, em seguida, tantos caracteres que sejam dígitos ou pontos quanto possível logo depois disso:

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

Você também precisa grepetir a substituição de todas as substrings correspondentes em cada linha no final.


Seu comando,

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

corresponderia ao primeiro :caractere e, em seguida,qualquer número de caracteres até o final da linha. É por isso que você acaba com

0|0
0|1

como saída.

A diferença entre esta e a minha expressão sugerida é .(que corresponde a qualquer caractere único), para a qual mudei para [0-9.]restringir o conjunto de caracteres que realmente queremos excluir. Também não podemos ancorar o padrão no final da linha, $pois também precisamos excluir coisas no meio da linha. E no gfinal, mas eu já mencionei isso.

informação relacionada