
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 g
al 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 g
final, pero eso ya lo mencioné.