extrair linhas de um arquivo de texto grande

0

Eu tenho um arquivo de texto com dados parecidos com este (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 têm "+" perto do final. (acontece depois do último ; . Da mesma forma, estou procurando extrair as linhas - strand e colocar em arquivos separados.

Editar: alteração do conjunto de dados, estava olhando para o arquivo errado antes.

    
por masfenix 06.01.2015 / 00:42

2 respostas

4

Nos comentários, eu entendo que você está tentando extrair linhas cuja sétima coluna seja + ou - . O arquivo de entrada é separado por tabulação. Para fazer isso, ao salvar as linhas + no arquivo chamado plus e as linhas 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'

    awk lê em um registro (linha) por vez e o separa em campos. Aqui, definimos o separador de campo para uma guia.

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

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

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

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

por 06.01.2015 / 00:52
0
sed -ne '/^[^+-]*+/w plus.file' -e //d -e '/^[^+-]-/w minus.file' <infile

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

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

Mas talvez você tenha que usar um caractere literal <tab> no lugar dos \t escapes acima.

    
por 06.01.2015 / 01:01

Tags