Hola, buenas tardes.
Por favor, pido su ayuda. Estoy
parseando unos archivos que tienen la siguiente estructura:
archivo1.txt
Using text Syntax Highlighting
P35720 327696
P35720 785395
P31039 281480
Q3T189 286840
Q95123 281481
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
archivo2.txt
Using text Syntax Highlighting
P35720 P31039
P35720 Q3T189
P35720 Q95123
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
En el archivo1.txt la primera columna contiene el nombre de una proteína en formato UNIPROTKB, la segunda columna contiene su nombre equivalente en formato ENTREZ_GEN_ID.
El segundo archivo se trata de pares de proteínas cuyos nombres se encuentran en formato UNIPROTKB.
La intención es tomar el primer elemento de la primera columna contenida en el archivo2.txt y buscar su similar en la primera columna del archivo1.txt, y al encontrar la coincidencia sustituir el elemento contenido en la segunda columna del archivo2.txt, es decir su nombre equivalente en formato ENTREZ_GEN_ID. Y así sucesivamente hasta sustituir todas los nombres de las proteínas.
Para lo que he escrito el siguiente código:
Using perl Syntax Highlighting
#!/usr/bin/perl -w
#ejercicio1.pl
my $arch = $ARGV[0];
open( ARCH, $arch );
my @equivalencias = <ARCH>;
close ARCH;
my $arch1 = $ARGV[1];
open( ARCH1, $arch1 );
my @red = <ARCH1>;
close ARCH1;
foreach $i (@equivalencias) {
chomp($i);
@rengloneq = split( /\t/, $i );
for ( $j = 0; $j < @red; $j++ ) {
@renglonred = split( /\t/, $red[$j] );
if ( $rengloneq[0] =~ $renglonred[0] ) {
$red[$j] = "$rengloneq[1]\t$renglonred[1]\n";
}
}
chomp(@red);
for ( $j = 0; $j < @red; $j++ ) {
chomp($j);
@renglonred = split( /\t/, $red[$j] );
if ( $rengloneq[0] =~ $renglonred[1] ) {
$red[$j] = "$renglonred[0]\t$rengloneq[1]\n";
}
}
}
chomp(@red);
foreach $k (@red) {
chomp($k);
print "$k\n";
}
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Pero ahora el problema es que como podemos observar en el archivo1.txt el nombre de una proteína en formato UNIPROTKB tiene más de un nombre equivalente en formato ENTREZ_GEN_ID.
archivo1.txt
Using text Syntax Highlighting
P35720 327696
P35720 785395
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Por lo que yo necesito mis resultados de la siguiente forma. Dado el par:
archivo2.txt
Using text Syntax Highlighting
P35720 P31039
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Obtener la siguiente substitución:
archivo_resultados.txt
Using text Syntax Highlighting
327696 281480
785395 281480
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Y con mi código lo único que obtengo es:
archivo_resultados.txt
Using text Syntax Highlighting
327696 281480
Coloreado en 0.000 segundos, usando
GeSHi 1.0.8.4
Y el segundo par no lo puedo obtener. Es decir: no me duplica mi información. Es por eso que pido su ayuda y sugerencias para modificar mi código y solucionar este problema.
Gracias...