Mejorar script para que sea más rápido
Publicado: 2015-08-01 06:18 @304
Estimados:
Soy novato en esto, y ando teniendo algunos problemitas.
Yo he adaptado un script en Perl para comparar dos archivos de unos análisis bioinformáticos y me está dando mucho dolor de cabeza porque es muy lento.
Mi pregunta es si alguien sabe cómo podría escribirlo para que funcione más rápido.
Básicamente lo que tengo que hacer es lo siguiente: Tengo dos archivo que tienen tres y cuatro columnas.
El primer archivo es de esta forma:
y el segundo, esta:
Lo que yo quiero hacer es que cuando encuentre una fila del archivo 2º donde Chr coincida con el del archivo 1º, y la posición del archivo 1º esté entre el inicio y fin del archivo 2º, me imprima en un archivo de salida lo siguiente:
Para eso adapté este script que me dieron pero resulta muy lento. ¿Alguien me podría ayudar con esto?
Desde ya, ¡muchas gracias!
Soy novato en esto, y ando teniendo algunos problemitas.
Yo he adaptado un script en Perl para comparar dos archivos de unos análisis bioinformáticos y me está dando mucho dolor de cabeza porque es muy lento.
Mi pregunta es si alguien sabe cómo podría escribirlo para que funcione más rápido.
Básicamente lo que tengo que hacer es lo siguiente: Tengo dos archivo que tienen tres y cuatro columnas.
El primer archivo es de esta forma:
Using text Syntax Highlighting
y el segundo, esta:
Using text Syntax Highlighting
gen Chr inicio fin
AT1G01020 1 50 350
AT1G01020 1 50 350
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Lo que yo quiero hacer es que cuando encuentre una fila del archivo 2º donde Chr coincida con el del archivo 1º, y la posición del archivo 1º esté entre el inicio y fin del archivo 2º, me imprima en un archivo de salida lo siguiente:
Using text Syntax Highlighting
gen Chr cuentas posición
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Para eso adapté este script que me dieron pero resulta muy lento. ¿Alguien me podría ayudar con esto?
Desde ya, ¡muchas gracias!
Using perl Syntax Highlighting
- my $input1 = "/home/damian/Escritorio/Arrays/archivo1";
- my $input2 = "/home/damian/Escritorio/Arrays/archivo2";
- my $output = "/home/damian/Escritorio/Arrays/salida";
- open( FILE1, "<$input1.txt" ) or die "could not open $input1 file";
- open( OUTPUTFILE, ">>$output.txt" ) or die "could not $output.txt output file";
- while (<FILE1>) { ## 1 100 0.5
- my @split1 = split( /\s/, $_ );
- my $Chr1 = $split1[0];
- my $posicion1 = $split1[1];
- my $cuentas = $split1[2];
- open( FILE2, "<$input2.txt" ) or die "could not open $input2 file";
- while (<FILE2>) { ## AT1G01020 1 50 350
- my @split2 = split( /\s/, $_ );
- my $Gen = $split2[0];
- my $Chr2 = $split2[1];
- my $incio = $split2[2];
- my $fin = $split2[3];
- if ( ( $Chr1 eq $Chr2 )
- and ( $posicion1 > $incio )
- and ( $posicion1 < $fin ) )
- {
- print OUTPUTFILE "$Gen\t$Chr2\t$cuentas\t$posicion1\n";
- print "$Gen\t$Chr2\t$cuentas\t$posicion1\n";
- }
- }
- }
- exit;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4