• Publicidad

Cómo encontrar líneas repetidas en fichero

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo encontrar líneas repetidas en fichero

Notapor fgalves » 2006-12-04 07:20 @347

Hola a todos,

Estoy tratando de encontrar el medio de buscar líneas repetidas en un fichero (sin tener que buscar una por una, obviamente). Para ello intento usar UltraEdit, pero como no encuentro dicha funcionalidad, me estoy planteando crear un script Perl para eso.
¿Alguien sabe alguna forma de hacerlo sin pasar por el script?

¡Muchas gracias!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor fgalves » 2006-12-04 07:41 @362

Como no encontraba la manera, decidi implementar el script que aqui os pongo como ejemplo:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use warnings;
use Getopt::Long;


my %lines;
my $I;

open(INFILE, "<./SQL_only_keys.xml") or die "Problem encountered opening input file\n";

# Following lines
while ( $I = <INFILE> ) {
       
        # We keep the line if CARF not yet defined, or if current StartTime bigger than the previous one
        chomp($I);
        if (not defined $lines{ $I }) {
                $lines{ $I } = $I;
        }
        else {
                print STDOUT $I."\n";
        }

}
close INFILE;

exit 0;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Saludos!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor fgalves » 2006-12-04 10:47 @491

Hola de nuevo,

El caso es que quiero modificar el script anterior para que lea lineas con el siguiente formato:

Código: Seleccionar todo
<row c1="PPP" c2="BP" c3="eI" c4="NL" c5="N" c6="N" c7="2" c8="X" c9="X" c10="X" c11="2" ......



Y he probado con el siguiente script, pero la regexp se me resiste....

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use warnings;
use Getopt::Long;


my %lines;
my $remaining;
my $key;
my $I;

open(INFILE, "<./SQL_only_keys.xml") or die "Problem encountered opening input file\n";

# Following lines
while ( $I = <INFILE> ) {
       
        if ( ($key, $remaining) = $I =~ /(.+)c10(.+)/ )
        {
         print STDOUT "hello"."\n";
         chomp($key);
                if (not defined $lines{ $key }) {
                        $lines{ $key } = $key;
                }
                else {
                print STDOUT $key."\n";
                }
                                }
                                else
                                {
                                        print STDOUT "hola"."\n";
                                }
}
close INFILE;

exit 0;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo que quiero, es en $key guardar el contenido de la linea hasta la columna c9="...", y hacia adelante deshecharlo usando el $remaining.
Pero desgraciadamente, los chivatos indican que mi regexp no funciona.

Alguien podria echarme una manita?

Muchas gracias!!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Re: Còmo encontrar líneas repetidas en fichero

Notapor explorer » 2006-12-04 11:27 @519

fgalves escribiste:Hola a todos,

Estoy tratando de encontrar el medio de buscar líneas repetidas en un fichero (sin tener que buscar una por una, obviamente). Para ello intento usar UltraEdit, pero como no encuentro dicha funcionalidad, me estoy planteando crear un script Perl para eso.
¿Alguien sabe alguna forma de hacerlo sin pasar por el script?
En Unix se suele usar el comando uniq para esta tarea.

En cuanto a Perl, hay que hacer un script. En este foro hay algunos ejemplos. En el FAQ de Perl, otro.
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

Notapor explorer » 2006-12-04 11:33 @523

fgalves escribiste:Lo que quiero, es en $key guardar el contenido de la linea hasta la columna c9="...", y hacia adelante desecharlo usando el $remaining.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
( $key ) = $I =~ /^(.+) c10/;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Pero seguro que es más interesante saber qué es lo que quieres hacer a continuación con esa línea...
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

Notapor fgalves » 2006-12-05 03:03 @169

Hola Explorer,
¡Gracias por las explicaciones!
Finalmente me di cuenta que estaba leyendo el fichero equivocado. La regexp me funciona perfectamente. De todos modos y teniendo en cuenta que trabajo en Unix, me ha servido para aprender el comando Uniq, el cual desconocía completamente.
¡Muchisimas gracias!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621


Volver a Básico

¿Quién está conectado?

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