fluxo editar GDRLR5L04EQY8D 3931 | 1166 em 3931

4

Eu tenho arquivos de sequência de DNA de texto grande com o seguinte formato

>name 
AACTGGGCT

Eu preciso analisar a linha de nome que atualmente tem informações extras e caracteres especiais, mantendo qualquer linha que não comece com > inalterado

tem (que é uma tabulação e não um espaço entre "D 3"):

>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG

deseja:

>3931
GACAAACGCTGGCGGGTGCATGAG

Eu tentei sed 's/\>*[[:blank:]]/>/g' para me livrar da primeira parte, mas isso não está funcionando. Será que gawk trabalharia para se livrar do tubo e do número depois disso?

    
por thermophile 05.09.2014 / 02:09

4 respostas

2

Usando awk :

awk -F'[| ]' '{if ( $1 ~ /^>/ ) print ">"$2; else print $0}' file
>3931
GACAAACGCTGGCGGGTGCATGAG

Se o espaço em branco entre o final da primeira string e o início do conjunto de dígitos antes do pipe for uma Tab , não um Espaço , o regex será definido o delimitador de campo seria [|\t] .

    
por 05.09.2014 / 02:22
2

solução sed:

sed '/^>/s/>.* \([0-9]*\)|.*/>/' < existing-file > new-file

Observe que /^>/ faz com que o comando a seguir opere apenas nas linhas de entrada que começam com & gt ;, algo que você parecia não saber que sed poderia fazer.

    
por 05.09.2014 / 02:28
0

Outro sed :

$ sed -e 's/[^>].* \([0-9]*\)|.*//' file
>3931
GACAAACGCTGGCGGGTGCATGAG
    
por 05.09.2014 / 03:52
0
sed 's/>.* />/;s/|.*//
' <<\DATA
>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG
DATA

OUTPUT

>3931
GACAAACGCTGGCGGGTGCATGAG
    
por 05.09.2014 / 05:00