• Publicidad

Cambiar de nombre a las cabeceras de un archivo fasta

Perl aplicado a la bioinformática

Cambiar de nombre a las cabeceras de un archivo fasta

Notapor manuel3180 » 2011-11-28 00:12 @050

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!!!
manuel3180
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-11-27 23:43 @030

Publicidad

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

Notapor explorer » 2011-11-28 08:41 @403

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 '_').
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

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

Notapor manuel3180 » 2011-11-28 11:55 @538

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 ....!!!
manuel3180
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2011-11-27 23:43 @030

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

Notapor explorer » 2011-11-28 16:30 @729

¿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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
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