• Publicidad

Ayuda con edición de cabeceras FASTA

Perl aplicado a la bioinformática

Ayuda con edición de cabeceras FASTA

Notapor Richard10 » 2013-04-03 17:45 @781

Soy nuevo en esto, pero sé que para muchas secuencias es más fácil usar Perl para editar las cabeceras FASTA para evitar errores en análisis posteriores. Mi problema es no saber cómo meter una línea de comandos. Tengo archivos de entrada:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>gi|343457071|gb|JF424046.1| Streptomyces abikoensis strain KCTC 9662 recombinase A (recA) gene, partial cds
TCCACCGGGTCGACCGCTCTCGACGTCGCGCTCGGTGTCGGCGGCCTGCCGCGCGGCCGCGTGGTGGAGA
TCTACGGACCGGAGTCCTCCGGTAAGACGACCCTGACGTTGCACGCCGTGGCCAACGCCCAGCGGGCCGG
CGGCACCGTCGCCTTCGTGGACGCCGAGCACGCCCTCGACCCCGAGTACGCCAGAAAGCTCGGCGTCGAC
ATCGACAACCTGATCCTTTCCCAGCCGGACAACGGCGAGCAGGCTCTCGAGATCGTCGACATGCTGGTCC

>gi|78173104|gb|DQ234054.1| Streptomyces argillaceus strain ATCC 12956 RecA (recA) gene, complete cds
CCATGGCAGGCACCGACCGCGAGAAGGCCCTGGACGCCGCACTCGCACAGATTGAACGGCAATTCGGCAA
GGGCGCGGTCATGCGCATGGGCGACCGCTCGAAGGAGCCCATCGAGGTCATCCCGACCGGGTCGACCGCG
CTCGACGTGGCCCTCGGCGTCGGCGGTCTGCCGCGCGGCCGTGTCATCGAGGTCTACGGACCCGAGTCCT
CCGGCAAGACGACCCTGACCCTGCACGCGGTGGCGAACGCCCAGAGGGCCGGCGGCCAGGTGGCGTTCGT
GGACGCCGAGCACGCCCTCGACCCCGAGTACGCGCAGAAGCTCGGCGTGGACATCGACAACCTGATCCTG
TCCCAGCCGGACAACGGCGAGCAGGCCCTGGAGATCGTGGACATGCTCGTCCGCTCCGGGGCCCTCGACC
TGATCGTCATCGACTCCGTCGCCGCGCTCGTCCCGCGTGCGGAGATCGAGGGCGAGATGGGCGACAGCCA
CGTGGGTCTGCAGGCCCGTCTGATGAGCCAGGCCCTGCGGAAGATCACCAGCGCGCTCAACCAGTCCAAG
ACCACCGCGATCTTCATCAACCAGCTCCGCGAGAAGATCGGTGTGATGTTCGGCTCCCCGGAGACCACGA
CCGGTGGCCGGGCGCTGAAGTTCTACGCCTCCGTGCGGCTCGACATCCGGCGCATCGAGACGCTGAAGGA

>gi|388462170|gb|JQ738389.1| Streptomyces labedae recombinase A (recA) gene, partial cds
GCACTCGCACAGATTGAACGCCAATTCGGCAAGGGCGCGGTCATGCGCATGGGCGAGCGGTCGAAGGAGC
CCATCGAGGTCATCCCGACCGGGTCGACCGCGCTCGACGTGGCCCTCGGCGTCGGCGGCCTGCCGCGTGG
CCGTGTGGTGGAGATCTACGGGCCGGAGTCCTCCGGTAAGACGACCCTGACCCTGCACGCGGTGGCGAAC
GCGCAGAAGGCCGGCGGCCAGGTCGCGTTCGTGGACGCGGAGCACGCCCTCGACCCCGAGTACGCGAAGA
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


y quiero editarlo para tener un archivo de salida:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>S_abikoensis
TCCACCGGGTCGACCGCTCTCGACGTCGCGCTCGGTGTCGGCGGCCTGCCGCGCGGCCGCGTGGTGGAGA
TCTACGGACCGGAGTCCTCCGGTAAGACGACCCTGACGTTGCACGCCGTGGCCAACGCCCAGCGGGCCGG
CGGCACCGTCGCCTTCGTGGACGCCGAGCACGCCCTCGACCCCGAGTACGCCAGAAAGCTCGGCGTCGAC
ATCGACAACCTGATCCTTTCCCAGCCGGACAACGGCGAGCAGGCTCTCGAGATCGTCGACATGCTGGTCC

>S_argillaceus
CCATGGCAGGCACCGACCGCGAGAAGGCCCTGGACGCCGCACTCGCACAGATTGAACGGCAATTCGGCAA
GGGCGCGGTCATGCGCATGGGCGACCGCTCGAAGGAGCCCATCGAGGTCATCCCGACCGGGTCGACCGCG
CTCGACGTGGCCCTCGGCGTCGGCGGTCTGCCGCGCGGCCGTGTCATCGAGGTCTACGGACCCGAGTCCT
CCGGCAAGACGACCCTGACCCTGCACGCGGTGGCGAACGCCCAGAGGGCCGGCGGCCAGGTGGCGTTCGT
GGACGCCGAGCACGCCCTCGACCCCGAGTACGCGCAGAAGCTCGGCGTGGACATCGACAACCTGATCCTG
TCCCAGCCGGACAACGGCGAGCAGGCCCTGGAGATCGTGGACATGCTCGTCCGCTCCGGGGCCCTCGACC
TGATCGTCATCGACTCCGTCGCCGCGCTCGTCCCGCGTGCGGAGATCGAGGGCGAGATGGGCGACAGCCA
CGTGGGTCTGCAGGCCCGTCTGATGAGCCAGGCCCTGCGGAAGATCACCAGCGCGCTCAACCAGTCCAAG
ACCACCGCGATCTTCATCAACCAGCTCCGCGAGAAGATCGGTGTGATGTTCGGCTCCCCGGAGACCACGA
CCGGTGGCCGGGCGCTGAAGTTCTACGCCTCCGTGCGGCTCGACATCCGGCGCATCGAGACGCTGAAGGA

>S_labedae
GCACTCGCACAGATTGAACGCCAATTCGGCAAGGGCGCGGTCATGCGCATGGGCGAGCGGTCGAAGGAGC
CCATCGAGGTCATCCCGACCGGGTCGACCGCGCTCGACGTGGCCCTCGGCGTCGGCGGCCTGCCGCGTGG
CCGTGTGGTGGAGATCTACGGGCCGGAGTCCTCCGGTAAGACGACCCTGACCCTGCACGCGGTGGCGAAC
GCGCAGAAGGCCGGCGGCCAGGTCGCGTTCGTGGACGCGGAGCACGCCCTCGACCCCGAGTACGCGAAGA
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Espero puedan ayudarme.
Richard10
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2013-04-03 17:35 @774

Publicidad

Re: Ayuda con edición de cabeceras FASTA

Notapor explorer » 2013-04-03 19:11 @841

Bienvenido a los foros de Perl en Español, Richard10.

Bueno, es algo sencillo de hacer. Incluso se puede resolver en una línea de comandos.

Suponiendo que los tres archivos se llaman gen1.fasta, gen2.fasta y gen3.fasta, se puede resolver el problema con esta línea de comandos:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
perl -a -p -F'\|' -E 'if (/^>/){@n=split" ",$F[4];$_=($.==1 ? "":"\n").">".substr($n[0],0,1)."_".$n[1]."\n";}' gen*fasta > salida.fasta
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Explicación:
  • usamos perl para el procesamiento de todos los archivos gen*fasta
  • con la opción -p, queremos que se lean todas las líneas de los archivos, una a una. Para cada una de ellas, se procesará el programa indicado por la cadena que sigue a -E, y al final, saldrá por la salida estándar
  • además, con la opción -a queremos que las líneas sean partidas por el delimitador '|' y cada parte guardada en el array @F
  • lo que sigue es el programa indicado por -E:
    • si la línea leída coincide con el patrón /^>/ (es una cabecera FASTA), procesamos la línea. Si no, no hacemos nada, y sale tal cual (por efecto de -p)
    • en caso de ser una cabecera FASTA, sabemos que por efecto de -a tenemos en @F todos los campos de la cabecera. Nos interesa el campo número 4, que es donde está el nombre de la secuencia
    • partimos entonces el campo $F[4] (con split()), pero esta vez usando los espacios en blanco como delimitadores. El resultado queda en @n. En $n[0] queda el nombre primero de la secuencia y en $n[1], el segundo
    • ahora modificamos el valor de la variable $_, que por defecto es el valor de la línea recién leída, y es el valor que -p sacará fuera. Como lo que queremos es modificar solo la cabecera, pues esa es la variable que queremos cambiar, y solo en ese momento (cuando sabemos que acabamos de leer una cabecera)
    • primero ponemos el ">" de la cabecera
    • de $n[0] solo nos quedamos con la primera letra (extraída con substr())
    • le sigue un "_" y le sigue $n[1] entero. Y un retorno de carro, para terminar la línea
    • como excepción, está la variable $.. Esta variable almacena el número de líneas leídas. En el código estamos preguntando si la línea leída (la de la cabecera) es la primera (o sea, del primer archivo). Si es así, no hace nada, pero si no, saca un retorno de carro adicional, delante, de la nueva línea modificada
  • finalmente, la salida se almacena en salida.fasta
El resultado es una salida como la que pedías.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados