• Publicidad

Comparar archivos

Perl aplicado a la bioinformática

Comparar archivos

Notapor barbara » 2011-01-17 09:13 @426

Hola...

Escribo porque tengo un gran problema: resulta que para poder terminar mi script me falta un último paso que es comparar dos archivos.

Tengo dos archivos así...

Archivo 1:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
GCTA           
AACCTA
GCCCCA
AACCCA
CTCCAC
......
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Archivo 2:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
AAACCC
TGTTCT
TGGGTG
GGTGTG
GGTATA
......
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Necesito comparar la primera línea de mi archivo 1 con todas las líneas de mi archivo 2, luego la línea 2 del archivo 1 con todas las líneas del archivo 1, y así sucesivamente, y dejar un registro cuando exista una igualdad...

He intentado hacerlo de varias formas que he visto aquí, pero no me resulta...

Si me pudieran ayudar se los agradecería mucho.

P.D.: será mejor pasar el archivo a un arreglo... ¿o sigo manejando los archivos?
barbara
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-01-12 13:49 @617

Publicidad

Re: Comparar archivos

Notapor explorer » 2011-01-17 11:21 @514

Lo normal es meter las líneas del fichero más pequeño en un hash, y luego recorrer línea a línea el fichero más grande. Por cada línea, vemos si esa línea existe en el hash, y si es así, la guardamos como coincidencia.

Por estos foros hay muchos ejemplos de esta misma tarea.

Y te podríamos ayudar más si pudiéramos ver tu código para decirte dónde están los problemas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparar archivos

Notapor Marielago » 2011-01-17 11:53 @537

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use common::sense;                      
  2. use autodie;                        
  3. use File::Slurp;
  4.  
  5. my @archivo_uno = read_file('archivo_1');     # archivo 1 y archivo 2 son los nombres de tus ficheros
  6. my @archivo_dos = read_file('archivo_2');
  7. open my $fichero_salida, '>', 'Salida.txt';   # aquí abres el fichero de salida
  8.  
  9. ## Comparación
  10.  
  11. for my $linea (@archivo_uno) {
  12.  
  13.     my $cadena_uno = (split " ", $linea)[0];
  14.  
  15.     if ($cadena_uno ~~ @archivo_dos) {        # si $primera_cadena está en el @segundo_archivo,
  16.  
  17.       print $fichero_salida $linea;           #     lo escribimos en el $fichero_salidas
  18.     }
  19. }
  20.  
  21. close $fichero_salida;                        # lo cierro
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393

Re: Comparar archivos

Notapor barbara » 2011-01-17 11:59 @541

Muchas gracias... me sirvió excelente el código que me enviaste... gracias.
barbara
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2011-01-12 13:49 @617

Re: Comparar archivos

Notapor explorer » 2011-01-17 12:06 @546

Hubiera sido mejor que lo enlazara con el original... :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparar archivos

Notapor Marielago » 2011-01-17 12:17 @553

Sí, tienes razón, lo saqué de ahí para hacer mi parte anterior :D
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393

Re: Comparar archivos

Notapor explorer » 2011-01-17 12:28 @561

¿Ya te has dado cuenta de que el split() de la línea 13 sobra? barbara quiere comparar líneas enteras, así que sobra el tratamiento de campos.

Pero bueno, está bien aplicado.

Aunque sospecho que una solución con hash sería mucho más rápida.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Comparar archivos

Notapor Marielago » 2011-01-17 12:37 @567

Si, eran solo cadenas, ahora lo noto :wink:
Marielago
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2011-01-14 08:26 @393


Volver a Bioinformática

¿Quién está conectado?

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