Sustitución de patrones de una columna a otra
Publicado: 2012-08-10 18:10 @798
Hola, buenas tardes.
Por favor, pido su ayuda. Estoy parseando unos archivos que tienen la siguiente estructura:
archivo1.txt
archivo2.txt
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:
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
Por lo que yo necesito mis resultados de la siguiente forma. Dado el par:
archivo2.txt
Obtener la siguiente substitución:
archivo_resultados.txt
Y con mi código lo único que obtengo es:
archivo_resultados.txt
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...
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
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
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.003 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
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
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...