Página 1 de 1

Cambiar de nombre a las cabeceras de un archivo fasta

NotaPublicado: 2011-11-28 00:12 @050
por manuel3180
Hola, ¿qué tal?

Me puse a revisar su foro y en primer lugar lo felicito por la forma didáctica que tiene de responder. Soy novato en el uso de los scripts en Perl. La verdad, me gustaría aprender, espero que me informe si pretende hacer algún curso; la verdad, estoy muy interesado.

Mi problema es el siguiente: muchas veces realizo alineamiento de secuencias provenientes del NCBI en formato multifasta; pero los headers son muy largos para ver con qué secuencia o secuencias estoy trabajando.

Ahora en el archivo multifasta puedo trabajar hasta con 50 secuencias a más.

Así que quisiera encontrar la forma de cambiar los nombres de los headers o cambiarlos por el número de accesión de las secuencias. Por ejemplo:

Secuencias en archivo multifasta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>Mycoplasma synoviae
atgcgatcgatcgatcgatagcatcgatcagcatcgatcgatcgactctgcatacgg

>Mycoplasma gallisepticum
atgcgatcgatcgatcgactcgatcagtcagctacgatcgactatcagctagc

>Mycoplasma enteritidis
atgtttgatgcattattgcatcgacgatcgatatcgagtcgatcgatcgtagctacgatcgatagtcattctagacagtcacg
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que se desea es un archivo output o de salida de la forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>MS
atgcgatcgatcgatcgatagcatcgatcagcatcgatcgatcgactctgcatacgg

>MG
atgcgatcgatcgatcgactcgatcagtcagctacgatcgactatcagctagc

>ME
atgtttgatgcattattgcatcgacgatcgatatcgagtcgatcgatcgtagctacgatcgatagtcattctagacagtcacg
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


De antemano, gracias por la atención prestada y la solución a mi problema.

¡¡¡Gracias!!!

Re: Cambiar de nombre a las cabeceras de un archivo fasta

NotaPublicado: 2011-11-28 08:41 @403
por explorer
Bienvenido a los foros de Perl en español, manuel3180.

Lo que quieres hacer es muy sencillo para Perl. Incluso ni hace falta escribir un programa.

Desde la misma línea de comandos puedes escribir algo como esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -p -i.bak -e 'if (/^>/) { s/\s*(\w)\w*/uc $1/ge }' code_28792.txt
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
siendo code_28792.txt el fichero fasta que quieres modificar.

Lo que hace el mini-programa es:

  • con la opción -p, se crea un bucle que recorre todas las líneas del fichero de entrada
  • con la opción -i.bak se indica que el fichero va a ser editado: las líneas leídas serán modificadas (según se indique después) y grabadas al mismo fichero. El texto .bak quiere decir que, de todas maneras, queremos que nos guarde el fichero original como code_28792.txt.bak
  • con la opción -e indicamos qué es lo que se debe hacer por cada línea del fichero en entrada
  • el programa hace lo siguiente: si la línea comienza (^) por el carácter '>', entonces debe realizar una operación de sustitución (s///), en el que debe localizar: 0 o más caracteres espacio (\s*) (son los espacios en blanco que hay delante de cada palabra), seguido de una letra que capturaremos en $1 ((\w)), seguida de 0 o más letras (\w*) (el resto de la palabra); y una vez que ha localizado una palabra, la sustituye por la ejecución (/e) del comando uc() (pasar a mayúsculas) de la letra que hemos capturado antes ($1). El resultado es que cada palabra que encontremos es sustituida por la letra inicial de la palabra, en mayúscula. Y esto lo hace para todas las palabras de la línea (/g).

En forma de programa, sería así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. while (<>) {
  4.     if (/^>/) {
  5.         s/\s*(\w)\w*/uc $1/ge;
  6.     }
  7.     print;
  8. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Naturalmente, todo esto funciona si los nombres de las secuencias se componen de caracteres alfanuméricos (letras, números y '_').

Re: Cambiar de nombre a las cabeceras de un archivo fasta

NotaPublicado: 2011-11-28 11:55 @538
por manuel3180
Muchas gracias por la ayuda, la respuesta fue positiva e inmediata. Espero contar con su apoyo en algún otro momento.

Un punto que quisiera preguntarle con respecto al script es: ¿qué sucedería si solo deseo el número de accesión? ¿Cómo se modificaría el script?

>gi|340366082|gb|JN118526.1| Salmonella enterica subsp. enterica serovar Enteritidis strain S294 16S ribosomal RNA gene, partial sequence
TCGAAAATCGGAATAAGCTTGCTGCTTCGCTGACGAGTGGCGGACGGGTGAGTAATGTCTGGGAAACTGC
CTGATGGAGGGGGATAACTACTGGAAACGGTGGCTAATACCGCATAACGTCGCAAGACCAAAGAGGGGGA
CCTTCGGGCCTCTTGCCATCAGATGTGCCCAGATGGGATTAGCTTGTTGGTGAGGTAACGGCTCACCAAG
GCGACGATCCCTAGCTGGTCTGAGAGGATGACCAGCCACACTGGAACTGAGACACGGTCCAGACTCCTAC
GGGAGGCAGCAGTGGGGAATATTGCACAATGGGCGCAGCCTGATGCAGCCATGCCGCGTGTATGAAGAAG
GCCTTCGGGTTGTAAAGTACTTTCAGCGGGGAGGAAGGTGTTGTGTTAATAACCGCAGCATTGACTTACC
CGGAAGAAGCACCGGCTAACTCCGTGCCGCAGCCGCCCAATACGGAGGGTGCAAGCGTTATCGAATTACT
GGGCGTAAGCCCCCGGGGGC

>JN118526.1
TCGAAAATCGGAATAAGCTTGCTGCTTCGCTGACGAGTGGCGGACGGGTGAGTAATGTCTGGGAAACTGC
CTGATGGAGGGGGATAACTACTGGAAACGGTGGCTAATACCGCATAACGTCGCAAGACCAAAGAGGGGGA
CCTTCGGGCCTCTTGCCATCAGATGTGCCCAGATGGGATTAGCTTGTTGGTGAGGTAACGGCTCACCAAG
GCGACGATCCCTAGCTGGTCTGAGAGGATGACCAGCCACACTGGAACTGAGACACGGTCCAGACTCCTAC
GGGAGGCAGCAGTGGGGAATATTGCACAATGGGCGCAGCCTGATGCAGCCATGCCGCGTGTATGAAGAAG
GCCTTCGGGTTGTAAAGTACTTTCAGCGGGGAGGAAGGTGTTGTGTTAATAACCGCAGCATTGACTTACC
CGGAAGAAGCACCGGCTAACTCCGTGCCGCAGCCGCCCAATACGGAGGGTGCAAGCGTTATCGAATTACT
GGGCGTAAGCCCCCGGGGGC

Nuevamente, muchas gracias por la atención prestada y espero su respuesta.

¡¡¡El foro es muy bueno y didáctico ....!!!

Re: Cambiar de nombre a las cabeceras de un archivo fasta

NotaPublicado: 2011-11-28 16:30 @729
por explorer
¿Y el número de accesión que norma sigue? ¿Empieza siempre por JN?

Si ese es el caso, bastaría con
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -p -E 's/^>.*?(JN[\d.]+).*/>$1/' fasta.txt
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Este caso es un poco más sencillo, ya que solo se trata de localizar un solo dato, en la línea, así que el patrón indica que: la línea debe comenzar (^) por '>', seguido de 0 o más letras, hasta encontrar algo que comienza por 'JN' seguido por un conjunto de dígitos y puntos ([\d.]+), y el resto de la línea (.*) (lo que sea). Capturamos ese código, con los paréntesis, y sustituimos toda la línea por '>' y el código capturado.