Página 1 de 1

Cambio de Id en fasta

NotaPublicado: 2016-09-07 09:16 @428
por fcorreas
Hola.

Soy nuevo en el foro, y quería pedir una ayuda. Soy biólogo y no me manejo mucho en programación.

Tengo un archivo fasta con cerca de 2 millones de registros, que apenas lo puedo abrir en un procesador de texto. Los registros se encuentran de la siguiente forma.
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>SRR1517819.1.1
TNTCATCGAGACAGACTGTGAGGTGGATTTTGCACCTCCTCTGGATTACAAGGAACCTGAAAGGCCTGTTGCAACTGTTCCTTCAGGCAAGGCACCATCACAAGTTGAAGAGATTCCAGCTGAGACCGAACCAAAATTCAAC
>SRR1517819.1.2
GTTGAATTTTGGTTCGGTCTCAGCTGGAATCTCTTCAACTTGTGATGGTGCCTTGCCTGAAGGAACAGTTGCAACAGGCCTTTCAGGTTCCTTGTAATCCAGAGGAGGTGCAAAATCCACCTCACAGTCTGTCTCGATGATA
>SRR1517819.2.1
CNTATACATTTCAATTTACAATTTCAACATAAAACAGAAATAAAATGATAATATAATGTTTACATCTGGAATATACAATTATTGATTAACAAGCCCGTATCGGTTAGTATTTTTTTTTTTTGGGTAACGAGGATCCCACCCGTATTTAAGT
>SRR1517819.2.2
ATAAGTTCCATCCTTCTGGGGGTTGTGTGCAACAAATGGATTTTACAACTTAAGTGTCAATTCCTTGAAGATCTGTCACTACTTAAATACGGGTGGGATCCTCGTTACCCAAAAAAAAAAAATACTAACCGATACGGGCTTGTTAATCAAT
>SRR1517819.3.1
CNGTAATGAAACAAGACATAAGACCAGCTCTCAAGGACATTGTTTGGACCTGGCAAGGGGAGCCGCAGCAGCAGCAGCATCAGCATCAAGAACAACTACAACTAGAGGAACAAGAGCTACAGCCTTCTCAAGCACTCCCAATG
>SRR1517819.3.2
CATTGGGAGTGCTTGAGAAGGCTGTAGCTCTTGTTCCTCTAGTTGTAGTTGTTCTTGATGCTGATGCTGCTGCTGCTGCGGCTCCCCTTGCCAGGTCCAAACAATGTCCTTGAGAGCTGGTCTTATGTCTTGTTTCATTACCG
>SRR1517819.4.1
CNCTGGTACTATTGCAACATAAGCACTCTCAAAAAAAGAAACAAGTAGCATTGACACAAAACAGATTTTGACTAGATAGCAACTGAGATAATGCTCTAATCGAAGAGTGAGAATCCCATATCTTCATCTTCGC
>SRR1517819.4.2
GCGAAGATGAAGATATGGGATTCTCACTCTTCGATTAGAGCATTATCTCAGTTGCTATCTAGTCAAAATCTGTTTTGTGTCAATGCTACTTGTTTCTTTTTTTGAGAGTGCTTATGTTGCAATAGTACCAGAG
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Como se observa, todos los id terminan en '.1' o '.2'.

Lo que necesito es que eso sea reemplazado por '/1' y '/2', respectivamente, quedando, por ej.:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
SRR1517819.1.1 -> SRR1517819.1/1
SRR1517819.1.2 -> SRR1517819.1/2
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


¿Cómo lo puedo hacer? ¿Con expresiones regulares?

Cualquier ayuda sería de gran utilidad.

Re: Cambio de Id en fasta

NotaPublicado: 2016-09-07 16:54 @746
por explorer
Bienvenido a los foros de Perl en Español, fcorreas.

El cambio es muy sencillo de hacer, en Perl. Desde la misma línea de comandos puedes ejecutar Perl con una orden para que te modifique el archivo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -p -i -e 's{^(>.+)[.](\d+)$}{$1/$2}' code_39671.txt
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Explicación:
  • la opción '-p' abre el archivo fasta 'code_39671.txt', y lo va leyendo línea por línea
  • la opción '-i' indica que vamos a hacer modificaciones al propio archivo
  • la opción '-e' indica el mini programa Perl que queremos que se ejecute en cada línea
  • el programa consiste un único comando de sustitución (s///): si la línea coincide con el primer patrón, lo sustituirá por la parte de reemplazo
  • el patrón es '^(>.+)[.](\d+)$', que quiere decir:
  • toda la línea, desde el principio (^)
  • debe empezar por el carácter '>' y seguirse por un uno o más caracteres cualesquiera (.+)
  • seguidos, al final ($), por el carácter de un punto ([.]) y un número (uno o más dígitos (\d+))
  • además, usando los paréntesis, recordaremos las dos partes separadas por el punto
  • si la línea coincide con el patrón, es sustituida por $1/$2, que es lo que hemos capturado en el par de paréntesis anteriores, pero esta vez separadas por una línea diagonal
Y ya está. Lo ejecutas una vez y el archivo ya queda modificado.

Tienes un resumen de exp. reg. en la página correspondiente en Wikipedia. Perl trae un montón de documentación para exp. reg.:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
        perlrequick         Perl regular expressions quick start
        perlretut           Perl regular expressions tutorial

          perlfaq6          Regexes

        perlre              Perl regular expressions, the rest of the story
        perlrebackslash     Perl regular expression backslash sequences
        perlrecharclass     Perl regular expression character classes
        perlreref           Perl regular expressions quick reference
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
que puedes ver con el comando perldoc.