Página 1 de 1

Extraer secuencia

NotaPublicado: 2012-07-05 09:41 @445
por Peznemo
Hola, a partir de un fichero con el siguiente formato:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>supercont1.1 of E.coli M1.001
TTATACTTAACTTATTATTTAAATTAATATAGCTTATTATATAGTAACCTTATAGTTCTA
ATTATATTATAAATAATTTATTTATTATACTTATTTAGTAGTTATTAAATATCTTTATTT
>supercont1.2 of E.coli M1.001
ATATAATAAATAAGAAGTATATATAAAGTAATAATTTTTTATTTATTTATAAGAATTATT
AAAGTTAGTTAATTTATAGTTATTATAACTATTAAAGATTAAAAGTTAATAAGTACTTTT
(...)
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Estoy intentando extraer, en otro fichero (out.txt), el primer supercont. Para ello, en teoría, (según lo que yo pretendía) bastaría con teclear 1.2 y dejar que ese valor se guardara en $a. Al hacer esto, en vez de obtener un fichero con sólo la primera secuencia, obtengo uno con todas las secuencias.

Seguramente sea algo muy tonto pero no tengo mucha experiencia programando en Perl :? , ¿alguien puede ayudarme?
Este es el código del programa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!usr/local/bin/perl
  2. use strict;
  3. use warnings;
  4. print "write the number of the supercontig from out which you want to start erasing";
  5. my $a=<STDIN>;
  6. chomp $a;
  7. my $file="E_coli_m1.001_1_supercontigs.fasta";
  8. my $out_file="out.txt";
  9. my $line;
  10.  
  11. open (IN, "<$file") or die "can't open $file :$!\n";
  12.  
  13. open (OUT, ">$out_file") or die "can't open $out_file:$!\n";
  14.  
  15. while ($line= <IN>) {
  16. if ($line =~m/\d$a/) {
  17. exit;}
  18. else {print OUT $line;
  19. }
  20. }
  21. close IN;
  22. close OUT;
  23. exit;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Re: Extraer secuencia

NotaPublicado: 2012-07-05 11:07 @505
por explorer
Bienvenido a los foros de Perl en Español, Peznemo.

El problema está en el bucle:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ( $line = <IN> ) {         # para cada $line del archivo de entrada
  2.     if ( $line =~ m/\d$a/ ) {    # si la línea contiene un dígito seguido de $a
  3.         exit;                    # terminamos
  4.     }
  5.     else {                       # si no (todas las demás)
  6.         print OUT $line;         # guardamos la línea
  7.     }
  8. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Entonces es claro: se guardan todas las líneas, hasta encontrar la línea que contiene ese patrón (un dígito más $a), cosa que -tampoco- se cumple nunca.

Cambia \d por \D (no dígito).

Re: Extraer secuencia

NotaPublicado: 2012-07-06 02:25 @142
por Peznemo
¡En efecto! ¡¡Ya funciona!!
Muchas gracias por la ayuda y la rapidez de la respuesta :)