• Publicidad

Sacar nombres de especies sin repetición

Perl aplicado a la bioinformática

Sacar nombres de especies sin repetición

Notapor xtr1985 » 2011-01-26 12:40 @569

Hola, necesito un programa de Perl que saque por pantalla (sin repetición) los nombres de las especies representadas en un fichero.

El fichero es así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>TPC2_XENTR Xenopus tropicalis
AAGTGACCGTAGACCAAAGCGAGTTTCGGCTCCAGGGAAGCGAGTTTCGGCTCCAGGGAAGCGAGTTTCGGCTCCAGGG
>TPC2_XENLA Xenopus laevis
ATGGAGTCGGAGCCGCTGCTCGGTTGGAGCGTCAATCTGCCTTGGAGAAAAGCGAGTTTCGGCTCCAGGG
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo que me interesa es que imprima sin repetición solo el nombre (ej: Xenopus tropicalis)

Muchas, muchas, gracias.

No sé si es muy simple, pero lo necesito lo más rápido posible. Gracias.
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Publicidad

Re: Sacar nombres de especies sin repetición

Notapor explorer » 2011-01-26 12:57 @581

Esto es lo que debes hacer:

* abres el fichero
* un bucle por todas las líneas. Para cada línea:
* si la línea no comienza por '>', pasa a la siguiente (por ejemplo, con next)
* quita el carácter de fin de línea con chomp()
* Extraer el nombre de la secuencia. Por el ejemplo, es a partir de la segunda palabra, así que puedes usar split() para dividir la línea en palabras, descartar la primera y quedarte con lo demás
* Metes el nombre de secuencia en un hash, como la clave. Como valor, no importa (lo normal, un '1')
* Fin del bucle
* Inicias otro bucle que recorra las claves del hash
* Por cada uno, lo imprimes en pantalla
* Fin del bucle
* Profit!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sacar nombres de especies sin repetición

Notapor xtr1985 » 2011-01-26 13:00 @583

¿Y esto en formato script? Gracias
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Re: Sacar nombres de especies sin repetición

Notapor explorer » 2011-01-26 13:02 @585

¿No sabes realizar ninguno de los pasos anteriores?

Inténtalo. Te ayudaremos con los fallos que encontremos.

¡Adelante!

P.D. En el foro de Bioinformática hay algunos problemas parecidos, ya resueltos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sacar nombres de especies sin repetición

Notapor xtr1985 » 2011-01-26 13:06 @587

Si me pudieras dar éste, porque es el inicio y estoy estancado y no lo sé hacer, a partir de aquí ya me espabilaría yo... Me harías un gran favor. Gracias igualmente por lo dado...
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Re: Sacar nombres de especies sin repetición

Notapor xtr1985 » 2011-01-26 13:13 @592

¿no? Siento ser pesado...
xtr1985
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2010-04-08 07:50 @368

Re: Sacar nombres de especies sin repetición

Notapor explorer » 2011-01-26 13:40 @611

Pero si en otras ocasiones has presentado programas mucho más complejos que el que pides...

A ver... mira...

Abrir un fichero: open()
Bucle: while()
Si no empieza por '>' pasa a la siguiente: next if ! /^>/;
Quita el fin de línea: chomp()
Sacar la secuencia: (undef, @secuencia) = split " "; $secuencia = join '', @secuencia;
Meterlo en el hash: $hash{$secuencia} = 1;
Fin del bucle
Bucle por las claves: for (keys %hash)
Imprime: print

¡Ya está!

En otros hilos se dan ejemplos de lectura de ficheros en formato FASTA.

Quizás alguno de los novatos que visitan estos foros se anime a escribirlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sacar nombres de especies sin repetición

Notapor wanako » 2011-01-26 15:44 @697

Siempre hay algún novato dando vueltas :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my %especies;
  7. my $archivo = 'fila.txt';
  8.  
  9. open DATOS, $archivo || die "$!\n";
  10.  
  11. while (<DATOS>) { $especies{$1} = 1 if /^>\w+\s+(.+)/;  }
  12.  
  13. close DATOS;
  14.  
  15. for ( keys %especies ) { print "$_\n"; }
  16.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
wanako
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2010-09-23 11:27 @519

Re: Sacar nombres de especies sin repetición

Notapor explorer » 2011-01-26 15:54 @704

Muy buena solución, simplificando el split()/join() con una expresión regular...

Lo que no me gusta es el '||' en el open(). Es mejor usar 'or', por el tema de la precedencia.

Como ejercicio, queda hacer esto mismo, pero eliminando el bucle de la línea 15.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sacar nombres de especies sin repetición

Notapor wanako » 2011-01-26 16:48 @741

Ups perdón, fue un rápido copy/paste :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my %especies;
  7. my $archivo = 'fila.txt';
  8.  
  9. open DATOS, $archivo or die "$!\n";
  10.  
  11. while (<DATOS>) { $especies{$1} = 1 if /^>\w+\s+(.+)/; }
  12.  
  13. close DATOS;
  14.  
  15. print map { "$_\n" } keys %especies;
  16.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más compacto, por el lado del uso de ciclos de CPU debe ser similar, ¿ahorramos unos valiosos bytes de memoria tal vez? :D
wanako
Perlero nuevo
Perlero nuevo
 
Mensajes: 27
Registrado: 2010-09-23 11:27 @519

Siguiente

Volver a Bioinformática

¿Quién está conectado?

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

cron