• Publicidad

Cómo cambiar una variable por otra

Perl aplicado a la bioinformática

Cómo cambiar una variable por otra

Notapor davids84 » 2011-05-03 10:34 @482

Hola. necesito de su ayuda... Ojalá alguien me pueda asesorar con esto...

Es un formato de secuencias de ADN... me busca la $variable y la $secuencia y abro otro archivo en el cual voy a buscar $variable con un grep() y si la encuentra, imprimir la $variable2 declarada en el if(), más o menos así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open( my $fh, $ARGV[0] ) or die "No se puede abrir el archivo\n";
  2.  
  3. my $var;
  4. my $sec;
  5.  
  6. while (<$fh>) {
  7.     if ( $_ =~ /^>(.+)\srank.*\n/ ) {
  8.         $var = $1;
  9.     }
  10.     if ( $_ =~ /^([ACGT].*)\n/ ) {
  11.         $sec = $1;
  12.     }
  13.  
  14.     my $archivo = '/root/Desktop/cdhits_IGH/cdhit_90.bak.clstr';
  15.     open( FH, $archivo ) or die "No se puede abrir\n";
  16.     if ( $_ =~ /^([0-9]{1,6}).*\n/ ) {
  17.         my $clu = $1;
  18.         my @result = grep {/$var/} <FH>;  #hago la busqueda de mi variable
  19.         print "$clu $var\n";
  20.         print "$sec\n";
  21.     }
  22.  
  23. }
  24.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Mis archivos de entrada son más o menos de esta manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. >G07VVQL01AJY0Q rank=0188884 x=110.5 y=1400.5 length=896
  2. CAGTAGGTATCAACGCAGGTAGTTAACGCGGGGTTACTACTATTCTCAGTTAGACGTCCT
  3. TCCACTCTAGAGCGTAACTAGGCGTGGTCCTCGGAACCGCTTACGACCTTCGTGGCCCGT
  4. GGGTTAGGTTCCGTTTTCCCTAACGCCTTGGGTCGCCTAAGTTCCCACGTGGCNCGACTC
  5. >G07VVQL01ATHR6 rank=0187486 x=218.0 y=3252.0 length=750
  6. TCGACGTCGGTAAAACGTCAAAAACGCAAACGACGTAACGCCGGGAAACCAGCCTATAGT
  7. CGACCTCGTACGTGGTACCTACCGTTTCCCAAAGTCCCTTGGTAACCCTACTTTACGAAA
  8. CGTTCGGTTAACCCAAGTTTCGGGTAACCCTTAGGTACCGTAGGGTTTCGTTTACCGTTC
  9.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
y el archivo 2 es así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. >Cluster 0
  2. 0       896aa, >G07VVQL01AJY0Q ra... *
  3. >Cluster 1
  4. 0       750aa, >G07VVQL01ATHR6 ra... *
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


y la salida sería de este modo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. >Cluster 0 G07VVQL01AJY0Q
  2. CAGTAGGTATCAACGCAGGTAGTTAACGCGGGGTTACTACTATTCTCAGTTAGACGTCCT
  3. TCCACTCTAGAGCGTAACTAGGCGTGGTCCTCGGAACCGCTTACGACCTTCGTGGCCCGT
  4. GGGTTAGGTTCCGTTTTCCCTAACGCCTTGGGTCGCCTAAGTTCCCACGTGGCNCGACTC
  5. >Cluster 1 G07VVQL01ATHR6
  6. TCGACGTCGGTAAAACGTCAAAAACGCAAACGACGTAACGCCGGGAAACCAGCCTATAGT
  7. CGACCTCGTACGTGGTACCTACCGTTTCCCAAAGTCCCTTGGTAACCCTACTTTACGAAA
  8. CGTTCGGTTAACCCAAGTTTCGGGTAACCCTTAGGTACCGTAGGGTTTCGTTTACCGTTC
  9.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

pero el problema es que no me imprime nada y al parecer se hace un loop infinito.
¿¿¿Alguien me podría ayudar, pliss??? :(
Última edición por explorer el 2011-05-03 10:44 @489, editado 1 vez en total
Razón: Formateo del código con la ayuda de perltidy; Tildes
davids84
Perlero nuevo
Perlero nuevo
 
Mensajes: 20
Registrado: 2011-01-27 13:14 @593

Publicidad

Re: Cómo cambiar una variable por otra

Notapor explorer » 2011-05-03 11:12 @508

El problema está en la línea 16: no hay ninguna línea del primer archivo que comience por un número.

Esta mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use Modern::Perl;
  3. use utf8;
  4. use autodie;
  5.  
  6. use File::Slurp 'slurp';
  7.  
  8. ## Leemos los ficheros
  9. my @fichero_secuencias = slurp('code_25802_1.txt');
  10. my @fichero_clusteres  = slurp('code_25802_2.txt');
  11.  
  12. ## Conversión de las secuencias
  13. my %secuencias;
  14. my($nombre, $secuencia);
  15.  
  16. for my $línea (@fichero_secuencias) {
  17.     given ($línea) {
  18.         when (/^ > (\w+)/x) {
  19.             $nombre    = $1;
  20.         }
  21.         default {
  22.             $secuencias{ $nombre } .= $línea;
  23.         }
  24.     }
  25. }
  26.  
  27. # Última secuencia del fichero
  28. $secuencias{ $nombre } = $secuencia;
  29.  
  30. use Data::Dumper::Names;
  31. #say Dumper(\%secuencias);
  32.  
  33. ## Extracción de los clústeres
  34. my %cluster;
  35. my($nombre_cluster, $código_secuencia);
  36. my @cluster;
  37. for my $cluster (@fichero_clusteres) {
  38.     given ($cluster) {
  39.         when (/^ > (.+)/x) {
  40.             $nombre_cluster = $1;
  41.         }
  42.         when (/^\d .+? >(\w+)/x) {
  43.             $código_secuencia = $1;
  44.             push @cluster,
  45.                  ">$nombre_cluster $código_secuencia\n$secuencias{ $código_secuencia }";
  46.         }
  47.     }
  48. }
  49.  
  50. #say Dumper(\@cluster);
  51. say @cluster;
  52.  
  53. __END__
  54. >Cluster 0 G07VVQL01AJY0Q
  55. CAGTAGGTATCAACGCAGGTAGTTAACGCGGGGTTACTACTATTCTCAGTTAGACGTCCT
  56. TCCACTCTAGAGCGTAACTAGGCGTGGTCCTCGGAACCGCTTACGACCTTCGTGGCCCGT
  57. GGGTTAGGTTCCGTTTTCCCTAACGCCTTGGGTCGCCTAAGTTCCCACGTGGCNCGACTC
  58. >Cluster 1 G07VVQL01ATHR6
  59. TCGACGTCGGTAAAACGTCAAAAACGCAAACGACGTAACGCCGGGAAACCAGCCTATAGT
  60. CGACCTCGTACGTGGTACCTACCGTTTCCCAAAGTCCCTTGGTAACCCTACTTTACGAAA
  61. CGTTCGGTTAACCCAAGTTTCGGGTAACCCTTAGGTACCGTAGGGTTTCGTTTACCGTTC
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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