¿Cómo eliminar el resto de cada línea después de un patrón determinado en un archivo vcf?

¿Cómo eliminar el resto de cada línea después de un patrón determinado en un archivo vcf?

Cómo eliminar los dígitos después de :iniciar sesión en cada línea de un archivo vcf. Ejemplo:

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

La salida debería ser:

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

He intentado lo siguiente, pero elimina todo después de la primera:

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

Respuesta1

Desea eliminar del :y luego tantos caracteres que sean dígitos o puntos como sea posible inmediatamente después de eso:

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

También lo necesita gal final para repetir la sustitución de todas las subcadenas coincidentes en cada línea.


Tu comando,

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

coincidiría con el primer :carácter, y luegocualquier número de caracteres hasta el final de la línea. Por eso terminas con

0|0
0|1

como salida.

La diferencia entre esta y mi expresión sugerida es .(que coincide con cualquier carácter), a la que cambié para [0-9.]restringir el conjunto de caracteres que realmente queremos eliminar. Tampoco podemos anclar el patrón al final de la línea, $ya que también necesitamos eliminar cosas en el medio de la línea. Y al gfinal, pero eso ya lo mencioné.

información relacionada