
Tengo un archivo de texto con datos parecidos a estos (1875 líneas para ser exactos)
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 6585538 6585547 0.905022147 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148428 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_6585517
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 6767855 6767864 0.703029237 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148303 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_6768100
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 8686283 8686292 0.481284243 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148085 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_-_8685906
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 10660924 10660933 0.818294903 + . TF_binding_site_cage_181208 MEF2A,B,C,D-148400 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_10661128
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327417 12327426 0.584010382 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148387 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504
chr1 MOTEVOC_cage_181208 TF_binding_site_cage_181208 12327433 12327442 0.825226087 - . TF_binding_site_cage_181208 MEF2A,B,C,D-148388 ;ALIAS MEF2A,MEF2B,MEF2C,MEF2D ;L3_ID L3_chr1_+_12327504
Estoy buscando una solución para extraer las líneas que tienen "+" cerca del final. (sucede después del último ;
. De manera similar, estoy buscando extraer las -
líneas de hebra y colocarlas en archivos separados.
Editar: cambio de conjunto de datos, antes estaba mirando el archivo equivocado.
Respuesta1
Por los comentarios, entiendo que está buscando extraer líneas cuya séptima columna sea +
o -
. El archivo de entrada está separado por tabulaciones. Para hacer eso, mientras guarda las +
líneas en el archivo llamado plus
y las líneas negativas en el archivo llamado minus
, la herramienta más natural es probablemente awk
:
awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file
Cómo funciona:
-F'\t'
awk
lee un registro (línea) a la vez y lo separa en campos. Aquí, configuramos el separador de campo en una pestaña.$7=="+"{print >"plus"}
Si el séptimo campo es un
+
, guarde la línea en el archivoplus
.$7=="-"{print>"minus"}
De manera similar, si el séptimo campo es a
-
, guarde la línea en el archivominus
.
Respuesta2
sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile
Para la séptima sección delimitada por tabulaciones, haga lo siguiente:
sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
/^-/{g;w minus.file' -e 'b
}; /^+/{g;w plus.file' -e \}
Pero es posible que tengas que usar un <tab>
carácter literal en lugar de los \t
escapes anteriores.