extraindo linhas de um arquivo de texto grande

extraindo linhas de um arquivo de texto grande

Eu tenho um arquivo de texto com dados parecidos com estes (1875 linhas para ser exato)

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 

Estou procurando uma solução para extrair as linhas que possuem "+" próximo ao final. (acontece depois do último ;. Da mesma forma, estou procurando extrair as -linhas dos fios e colocá-las em arquivos separados.

Editar: mudança de conjunto de dados, estava olhando o arquivo errado antes.

Responder1

Pelos comentários, entendo que você está procurando extrair linhas cuja 7ª coluna seja +ou -. O arquivo de entrada é separado por tabulações. Para fazer isso, ao salvar as +linhas no arquivo chamado pluse as linhas de menos no arquivo chamado minus, a ferramenta mais natural é provavelmente awk:

awk -F'\t' '$7=="+"{print >"plus"} $7=="-"{print>"minus"}' file

Como funciona:

  • -F'\t'

    awklê um registro (linha) por vez e o separa em campos. Aqui, definimos o separador de campos como uma guia.

  • $7=="+"{print >"plus"}

    Se o sétimo campo for a +, salve a linha no arquivo plus.

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

    Da mesma forma, se o sétimo campo for a -, salve a linha no arquivo minus.

Responder2

sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile

Para a sétima seção delimitada por tabulações, faça:

sed -ne 'h;s/\([^\t]*\t\)\{6\}[^\t+-]*//
            /^-/{g;w minus.file' -e 'b
         }; /^+/{g;w plus.file'  -e \}

Mas talvez você precise usar um <tab>caractere literal no lugar dos \tescapes acima.

informação relacionada