como excluir determinado número ou letra antes de um símbolo (|) usando o comando grep

0

Eu tenho o número N de sequência em um arquivo como este

>668|CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

>669|CAX10447 conserved protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

ou assim

>gi|76167242|gb|AAX50250.1| hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

Agora, preciso de um comando grep para excluir uma palavra ou um número específico na primeira linha.

O resultado deve ser:

>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR

ou

>AAX50250.1| hypothetical protein CTA_0001 [Chlamydia trachomatis A/HAR-13]
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRAAESRS
SSRTARGASSGYREYSPSAAR

Eu preciso de um comando grep para fazer essa ação, usei sed mas ele removeu a primeira linha, o ID, por isso é difícil identificar qual sequência é qual.

    
por Nitha 28.06.2016 / 13:09

2 respostas

2

Parece que você deseja remover tudo antes do último caractere | . No entanto, seu segundo exemplo tem um | após o ID e antes do hypothetical protein . Presumivelmente, nesse caso, você deseja remover tudo antes do último | que não é seguido por um espaço.

Aqui está uma maneira:

$ sed 's/| / /; s/^[^ ]*|/>/' file.pep 
>CAX10446 conserved hypothetical protein 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRRSSATRATESRSSSRTARGASSGYKEYSPSAAR
>AAX50250.1 hypothetical protein CTA_0001 
MSIRGVGGNGNSRIPSHNGDGSNRRSQNTKNKVEDRVRSLYSSRSNENRESPYAVVDVSSMIESTPTSGE
TTRASRGVFSRFQRGLGRVADKVRRAVQRAWSSVSIRR

O s/| / /; remove qualquer | seguido por um espaço. Isso removerá o | de AAX50250.1| . O s/^[^ ]*|/>/ procura > no início da linha ( ^> ) e remove a cadeia mais longa de caracteres que não são de espaço ( [^ ] ) até o último | na linha.

    
por terdon 28.06.2016 / 13:34
0

Se você quiser fazer isso com o grep. Você deve ler 3 linhas depois de cada linha vazia e copiá-la para variável. Você deve cortar a última parte da variável.

O analisador fará isso;

Primeira reverse string

Segundo cut string com | e obtenha primeiro

Terceira reverse string

echo $yourstring |rev |cut -d'|' -f1|rev

BTW isso não removerá, apenas mostrará a peça. Se você quiser salvar a saída, redirecione-a para o arquivo.

echo $yourstring |rev |cut -d'|' -f1|rev > yournewfile
    
por Yavuz Selim 28.06.2016 / 13:48