extraer líneas de un archivo de texto grande

extraer líneas de un archivo de texto grande

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 plusy 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'

    awklee 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 archivo plus.

  • $7=="-"{print>"minus"}

    De manera similar, si el séptimo campo es a -, guarde la línea en el archivo minus.

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 \tescapes anteriores.

información relacionada