• Publicidad

Problema con eliminar elementos de una tabla

Perl aplicado a la bioinformática

Problema con eliminar elementos de una tabla

Notapor xtr1985 » 2010-04-08 07:58 @374

Hola, mi problema es que tengo un archivo que tiene muchos elementos de los cuales yo solo me quedo con dos y hago un archivo .txt con dos columnas, a partir de ahí tengo que eliminar una parte de esas columnas... en cada columna de las dos me sale esto: uniprotkb:00993212 y solo me tendría que quedar con el número y no lo sé hacer... Aquí os dejo el programa... Muchas gracias.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #use strict;
  2. my $Interact1=0;
  3. my $Interact2=1;
  4. my $a;
  5. my $b;
  6. my @edge;
  7. my @linea;
  8. my $i;
  9. my $j;
  10. my %nodes;
  11.  
  12. $a=0;
  13. $b=0;
  14. $i=0;
  15. $j=0;
  16.  
  17. open (IN,"intact.txt");
  18. chomp;
  19. while(<IN>)
  20.         {      
  21.         if ($_ =~ /taxid:9606/){
  22.                 ($int1,$int2)=(split '\t')[$Interact1,$Interact2];
  23.                 $int1=~/(uniprotkb\:)(.*)(\|)/;
  24.                 $edge{$int1."\t".$int2}=0;
  25.                 $nodes{$int1}=0;
  26.                 $nodes{$int2}=0;
  27.                 print $int1,"\t",$int2,"\n";
  28.                 $i++;
  29.                 }
  30.         }
  31. close (IN);
  32. for $b (0..$i){
  33.         $j=0;
  34. print "$nodes{$b}{$j}\n";
  35.         $j=1;
  36. print "$nodes{$b}{$j}\n";
  37. }
  38.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Luego pongo en la terminal perl elnombredelarchivo.pl > ejemplo.txt y ya tengo el archivo .txt. Gracias por la ayuda.
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Publicidad

Re: Problema con eliminar elementos de una tabla

Notapor panterozo » 2010-04-08 08:24 @391

Según entiendo lo que escribiste, deseas hacer algo así...

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3.  
  4. open N , "<ejemplo.txt";#se abre el archivo con "uniprotkb:00993212" muchos datos
  5. while (<N>){
  6.         my $dato = $_;
  7.         if($dato =~ m/uniprotkb/){
  8.                 $dato =~ s/uniprotkb://g;
  9.                 open M,">>nuevo.txt";#Se guardan solo los numeros
  10.                 print M $dato;
  11.                 close M;
  12.                 }
  13.         }
  14. close N
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



ejemplo.txt:

uniprotkb:00993212
uniprotkb:00993212
uniprotkb:00993211
uniprotkb:00993212
uniprotkb:00993213
uniprotkb:00993214
uniprotkb:00993215
uniprotkb:00993216
uniprotkb:00993217
uniprotkb:00993217
uniprotkb:00993218

nuevo.txt:

00993212
00993212
00993211
00993212
00993213
00993214
00993215
00993216
00993217
00993217
00993218

¿Eso es lo que se desea?

un saludo ;)
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Problema con eliminar elementos de una tabla

Notapor explorer » 2010-04-08 08:31 @396

Bienvenido a los foros de Perl en Español, xtr1985.

El programa que muestras... no hace nada de lo que cuentas... ¿seguro que es ese?

Sería interesante ver algún ejemplo del fichero de entrada original, aunque sea con datos falsos, y saber qué es lo que quieres, al final.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con eliminar elementos de una tabla

Notapor xtr1985 » 2010-04-08 08:41 @404

Panterozo, gracias sí que funciona.

El archivo original tiene un aspecto así:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. #ID(s) interactor A    ID(s) interactor B    Alt. ID(s) interactor A    Alt. ID(s) interactor B    Alias(es) interactor A    Alias(es) interactor B    Interaction detection method(s)    Publication 1st author(s)    Publication Identifier(s)    Taxid interactor A    Taxid interactor B    Interaction type(s)    Source database(s)    Interaction identifier(s)    Confidence value(s)    Experimental role(s) interactor A    Experimental role(s) interactor B    Biological role(s) interactor A    Biological role(s) interactor B    Properties interactor A    Properties interactor B    Type(s) interactor A    Type(s) interactor B    HostOrganism(s)    Expansion method(s)    Dataset name(s)    Annotation(s) interactor A    Annotation(s) interactor B    Parameter(s) interactor A    Parameter(s) interactor B    Parameter(s) interaction 
  2. uniprotkb:Q64697|intact:EBI-1666    uniprotkb:P06240|intact:EBI-1401    uniprotkb:CD45-associated protein(gene name synonym)|uniprotkb:LSM-1(gene name synonym)|uniprotkb:ptca_mouse(shortlabel)|irefindex:xNDm62PxqaVSsxSN7/rDeQ2Ox8010090(rogid)    uniprotkb:Lsk-t(gene name synonym)|uniprotkb:Lymphocyte cell-specific protein-tyrosine kinase(gene name synonym)|uniprotkb:p56-LCK(gene name synonym)|uniprotkb:LSK(gene name synonym)|uniprotkb:lck_mouse(shortlabel)|irefindex:cXCFhEhqhmg+qwWLHNCVfvK8fG810090(rogid)    uniprotkb:Ptprcap    uniprotkb:Lck    psi-mi:"MI:0019"(coimmunoprecipitation)    Veillette et al. (1999)    pubmed:10318863    taxid:10090(Mouse)    taxid:10090(Mouse)    psi-mi:"MI:0914"(association)    psi-mi:"MI:0469"(IntAct)    intact:EBI-1670|irefindex:m73c1ziBvr4VCE658cPWafPcWPE(rigid)    -    psi-mi:"MI:0496"(bait)    psi-mi:"MI:0498"(prey)    psi-mi:"MI:0499"(unspecified role)    psi-mi:"MI:0499"(unspecified role)    ipi:IPI00316976|ensembl:ENSMUSG00000045826|refseq:NP_058629.2|interpro:IPR016553(Receptor tyrosine-protein phosphatase C-associated protein CD45-AP)|go:"GO:0016021"(integral to membrane)|uniprotkb:Q64697(identity)    ipi:IPI00555017|go:"GO:0005524"(ATP binding)|go:"GO:0004715"(non-membrane spanning protein tyrosine kinase activity) 


Y tenía que eliminar los códigos uniprotkb: y el intact: solo quedándome con los números en cada columna. Para después hacer un programa conversor (a partir de otro archivo que tengo que te que tiene los códigos uniprotkb e intact, y otra base de datos) el objetivo final es que me convierta estos dos códigos por el de la otra bases de datos...
¿¿¿Alguna idea de cómo hacerlo??? Muchas gracias
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Re: Problema con eliminar elementos de una tabla

Notapor panterozo » 2010-04-08 08:57 @415

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3.  
  4. open N , "<ejemplo.txt";
  5. while (<N>){
  6.         my $dato = $_;
  7.         if($dato =~ m/uniprotkb:(\w+)\|intact:((\w+)-(\d+))*\suniprotkb:(\w+)\|intact:((\w+)-(\d+))*/){
  8.                 open M,">>nuevo.txt";
  9.                 print M "\n".$1."\n".$2."\n".$5."\n".$6."\n";
  10.                 close M;
  11.                 }
  12.         }
  13. close N
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Algo así sería... pero recién comienzo con Expresiones Regulares... Seguro que hay otra forma más fácil de hacer esto ;)

Suponiendo que el archivo ejemplo.txt, se compone de:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
uniprotkb:P46108|intact:EBI-886 uniprotkb:Q92918|intact:EBI-881
uniprotkb:P46109|intact:EBI-910 uniprotkb:Q92918|intact:EBI-881
uniprotkb:P46108|intact:EBI-886 uniprotkb:Q9Y4K4|intact:EBI-1279
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


tal cual ;)
Última edición por explorer el 2010-04-08 09:49 @450, editado 1 vez en total
Razón: Tildes
panterozo
Perlero nuevo
Perlero nuevo
 
Mensajes: 160
Registrado: 2010-01-26 08:36 @400

Re: Problema con eliminar elementos de una tabla

Notapor explorer » 2010-04-08 10:51 @494

He reeditado el mensaje de xtr1985 para que quedase claro de que es un fichero de texto, con un registro cada línea, teniendo la primera línea las cabeceras de las columnas, y que éstas están separadas por caracteres tabulador.

Con este pequeño programa, se puede ver mejor su contenido:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3.  
  4. my ($cabecera,$datos) = <>;
  5.  
  6. chomp($cabecera, $datos);
  7.  
  8. my @cabecera = split "\t", $cabecera;
  9. my @datos    = split "\t", $datos;
  10.  
  11. for (0 .. $#cabecera) {
  12.     print "[$cabecera[$_]] => [$datos[$_]]\n";
  13. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Sale:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[#ID(s) interactor A] => [uniprotkb:Q64697|intact:EBI-1666]
[ID(s) interactor B] => [uniprotkb:P06240|intact:EBI-1401]
[Alt. ID(s) interactor A] => [uniprotkb:CD45-associated protein(gene name synonym)|uniprotkb:LSM-1(gene name synonym)|uniprotkb:ptca_mouse(shortlabel)|irefindex:xNDm62PxqaVSsxSN7/rDeQ2Ox8010090(rogid)]
[Alt. ID(s) interactor B] => [uniprotkb:Lsk-t(gene name synonym)|uniprotkb:Lymphocyte cell-specific protein-tyrosine kinase(gene name synonym)|uniprotkb:p56-LCK(gene name synonym)|uniprotkb:LSK(gene name synonym)|uniprotkb:lck_mouse(shortlabel)|irefindex:cXCFhEhqhmg+qwWLHNCVfvK8fG810090(rogid)]
[Alias(es) interactor A] => [uniprotkb:Ptprcap]
[Alias(es) interactor B] => [uniprotkb:Lck]
[Interaction detection method(s)] => [psi-mi:"MI:0019"(coimmunoprecipitation)]
[Publication 1st author(s)] => [Veillette et al. (1999)]
[Publication Identifier(s)] => [pubmed:10318863]
[Taxid interactor A] => [taxid:10090(Mouse)]
[Taxid interactor B] => [taxid:10090(Mouse)]
[Interaction type(s)] => [psi-mi:"MI:0914"(association)]
[Source database(s)] => [psi-mi:"MI:0469"(IntAct)]
[Interaction identifier(s)] => [intact:EBI-1670|irefindex:m73c1ziBvr4VCE658cPWafPcWPE(rigid)]
[Confidence value(s)] => [-]
[Experimental role(s) interactor A] => [psi-mi:"MI:0496"(bait)]
[Experimental role(s) interactor B] => [psi-mi:"MI:0498"(prey)]
[Biological role(s) interactor A] => [psi-mi:"MI:0499"(unspecified role)]
[Biological role(s) interactor B] => [psi-mi:"MI:0499"(unspecified role)]
[Properties interactor A] => [ipi:IPI00316976|ensembl:ENSMUSG00000045826|refseq:NP_058629.2|interpro:IPR016553(Receptor tyrosine-protein phosphatase C-associated protein CD45-AP)|go:"GO:0016021"(integral to membrane)|uniprotkb:Q64697(identity)]
[Properties interactor B] => [ipi:IPI00555017|go:"GO:0005524"(ATP binding)|go:"GO:0004715"(non-membrane spanning protein tyrosine kinase activity)]
[Type(s) interactor A] => []
[Type(s) interactor B] => []
[HostOrganism(s)] => []
[Expansion method(s)] => []
[Dataset name(s)] => []
[Annotation(s) interactor A] => []
[Annotation(s) interactor B] => []
[Parameter(s) interactor A] => []
[Parameter(s) interactor B] => []
[Parameter(s) interaction] => []
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

de las que solo interesan las dos primeras columnas, y de ellas, solo los números.

Con el siguiente programa
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. while (my $linea = <>) {
  7.     chomp $linea;
  8.  
  9.     next if $linea =~ /^#/;             # Obviamos las líneas que comiencen por '#'
  10.  
  11.     my @datos = split "\t", $linea;     # Partimos la línea
  12.  
  13.     for (0, 1) {                                                # Para los dos primeros campos
  14.         $datos[$_] =~ /uniprotkb:.*?(\d+).*?intact:.*?(\d+)/;   # Buscamos los números
  15.         print join("\t", $1, $2), "\n";                         # Y los sacamos
  16.     }
  17.  
  18. }
  19.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

sale
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
64697   1666
06240   1401
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con eliminar elementos de una tabla

Notapor xtr1985 » 2010-04-08 11:07 @505

Muchas gracias por los post. Me han ayudado mucho.

Yo he llegado a esto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #use strict;
  2. my $Interact1=0;
  3. my $Interact2=1;
  4. my $a;
  5. my $b;
  6. my @edge;
  7. my @linea;
  8. my $i;
  9. my $j;
  10. my %nodes;
  11.  
  12. $a=0;
  13. $b=0;
  14. $i=0;
  15. $j=0;
  16.  
  17. open (IN,"intact.txt"); #el archivo intact.txt es de donde me quedo lo que me interesa
  18. chomp;
  19. while(<IN>)
  20.         {      
  21.         if ($_ =~ /taxid:9606/){ #el taxid es el inicio de la linea q quiero.
  22.                 ($int1,$int2)=(split '\t')[$Interact1,$Interact2]; #las partes q quiero de esa fila
  23.                 $int1=~/(uniprotkb\:)(.*)(\|)/;
  24.                 $int1 =~ s/uniprotkb://g;
  25.                 $int1 =~ s/intact://g;
  26.                 $int1 =~ s/\|/\t/g;
  27.                 $int2=~/(uniprotkb\:)(.*)(\|)/;
  28.                 $int2 =~ s/uniprotkb://g;
  29.                 $int2 =~ s/intact://g;
  30.                 $int2 =~ s/\|/\t/g;
  31.                
  32.                 $edge{$int1."\t".$int2}=0;
  33.                 $nodes{$int1}=0;
  34.                 $nodes{$int2}=0;
  35.                 print $int1,"\t",$int2,"\n";
  36.                 $i++;
  37.                 }
  38.         }
  39. close (IN);
  40. for $b (0..$i){
  41.         $j=0;
  42. print "$nodes{$b}{$j}\n";
  43.         $j=1;
  44. print "$nodes{$b}{$j}\n";
  45. }
  46.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Obteniendo así un programa que me deja unas columnas así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Q9GZM8  intact:EBI-928842       Q9GZM8  intact:EBI-928842
Q9GZM8  intact:EBI-928842       Q66J96  intact:EBI-1009412
P15920  intact:EBI-988456       P63034  intact:EBI-988425
Q99418  intact:EBI-448974       Q9Y487  intact:EBI-988630
Q99418  intact:EBI-448974       Q9Y487  intact:EBI-988630
P21283  intact:EBI-988663       P62331  intact:EBI-988682
P62330  intact:EBI-638181       P21283  intact:EBI-988663
P13569  intact:EBI-349854       Q99942  intact:EBI-348482
P21283  intact:EBI-988663       P62330  intact:EBI-638181
P13569  intact:EBI-349854       Q99942  intact:EBI-348482
Q96RT1  intact:EBI-993903       Q9UQ13  intact:EBI-993879
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Pero al final he hablado con el profesor y me dice que solo me tengo que quedar con los códigos de la primera y tercera columna (Q9GZM8...), y convertirlo en una sola columna y eliminar repeticiones... ¿¿Ayudas??
Gracias.
Última edición por explorer el 2010-04-08 12:05 @545, editado 1 vez en total
Razón: Formateo, bloques de código, tildes, q => que
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Re: Problema con eliminar elementos de una tabla

Notapor explorer » 2010-04-08 12:08 @547

Como las columnas están separadas por tabuladores, es muy fácil sacar las que quieras, con la ayuda de split().

Y para eliminar repeticiones, tienes que almacenar lo que vas leyendo en un hash.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14475
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados