Comparar dos listas sin que cambie la posición
Publicado: 2012-02-02 16:56 @747
Hola a todos.
En esta ocasión busco ayuda por el siguiente inconveniente: tengo un código que me compara dos listas (son códigos ID). Si el ID de la lista 1 existe en la segunda columna de la lista 2, entonces imprime el ID correspondiente de la lista 1 y el ID correspondiente de la primera columna de la lista 2.
Bien, el programa hace eso, pero cuando reviso el archivo de salida me doy cuenta de que las posiciones cambian, es decir, el que era el código primero ya no lo es.
Para los fines que requiero es importante que haga la comparación pero que imprima sin alterar el orden de la lista 1.
¿Cómo puedo programar esto? ¿¿Hay algún comando que pueda utilizar??
Gracias de nuevo.
Cualquier comentario seguro será de gran ayuda, como siempre.
Enseguida les dejo mi código y les adjunto los archivos de entrada y cómo debería ser mi archivo de salida.
Saludos.
Mi archivo de salida debería ser así:
En esta ocasión busco ayuda por el siguiente inconveniente: tengo un código que me compara dos listas (son códigos ID). Si el ID de la lista 1 existe en la segunda columna de la lista 2, entonces imprime el ID correspondiente de la lista 1 y el ID correspondiente de la primera columna de la lista 2.
Bien, el programa hace eso, pero cuando reviso el archivo de salida me doy cuenta de que las posiciones cambian, es decir, el que era el código primero ya no lo es.
Para los fines que requiero es importante que haga la comparación pero que imprima sin alterar el orden de la lista 1.
¿Cómo puedo programar esto? ¿¿Hay algún comando que pueda utilizar??
Gracias de nuevo.
Cualquier comentario seguro será de gran ayuda, como siempre.
Enseguida les dejo mi código y les adjunto los archivos de entrada y cómo debería ser mi archivo de salida.
Saludos.
Using perl Syntax Highlighting
- #!/usr/local/bin/perl
- # Este programa compara un id de una lista con el de una segunda lista, si el ID es igual entonces imprime las variables que tu desees
- # funciona para dos listas y los archivos se pueden usar sin importar el lugar (1.txt vs 2.txt o bien 2.txt vs 1.txt)
- # uso:
- # perl extract_filas_lista.pl file1 file2
- # output: lista.txt
- use strict;
- my $file1 = $ARGV[0]; # ingresa un archivo que se llamara file1
- my $file2 = $ARGV[1]; # ingresa un archivo que se llamara file2
- my %filas;
- my $n = 0;
- my $numero1;
- open( LISTA, "$file1" ) || die("No puedo abrir $file1\n");
- while ( my $linea = <LISTA> ) {
- chomp($linea);
- if ( $linea =~ /(\d+)/ ) { # este patrón se puede cambiar para adaptarse a tus necesidades
- $numero1 = $1;
- $filas{$numero1} = 0;
- $n++;
- #print ("$numero1\n");
- }
- }
- close(LISTA);
- open( LISTA, "$file2" ) || die("No puedo abrir $file2\n");
- open( RES, ">iguales.txt" ) || die("no puedo abrir secuencias.fasta\n");
- my %filas2;
- my $n1 = 0;
- my $numero1;
- my $var1;
- my $var2;
- my @a;
- while ( my $linea = <LISTA> ) {
- chomp($linea);
- if ( $linea =~ /(\d+)/ ) { # este patrón se puede cambiar para adaptarse a tus necesidades
- my @a = split( /\t/, $linea );
- $var1 = $a[0];
- $var2 = $a[1];
- $filas2{$var1} = $linea;
- $n1++;
- #print ("$var1\n");
- #print ("$var2\n");
- if ( exists $filas{ $a[1] } ) {
- print RES "$a[1]\t$var1\n";
- }
- }
- }
- close(LISTA);
- close(RES);
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Mi archivo de salida debería ser así: