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.
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í:
Using text Syntax Highlighting
358395159 87581
358397962 45489
358397435 283182
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4