
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 plus
e 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'
awk
lê 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 arquivoplus
.$7=="-"{print>"minus"}
Da mesma forma, se o sétimo campo for a
-
, salve a linha no arquivominus
.
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 \t
escapes acima.