Perl - buscar dentro de un archivo

 
Vista:

buscar dentro de un archivo

Publicado por Lucas (4 intervenciones) el 30/04/2003 13:56:13
Hola!
Estoy tratando de encontrar una forma para poder buscar distintos elementos dentro de un archivo, con Perl...algo que me sirva de buscador en un archivo, para posteriormente trabajar con él...Como creo que no me explico muy bien ahí va un elemplo:
Tengo un archivo: nombres.txt (formado por; juan, pedro, lucas).
me gustaría poder buscar uno , ejp. juan, y después que me lo imprimiese.
Lo he intentado como si buscara dentro de una cadena, de tal modo que el contenido del archivo lo guardo como una cadena, abriéndo el archivo y utilizando:
if ($cadena=~ /j*/) {
print;
}
pero no funcionó.
Agradecido de antemano por cualquier ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:buscar dentro de un archivo

Publicado por cristian (11 intervenciones) el 30/04/2003 14:58:57
No estoy seguro si es esto lo que quieres, esta es una forma simpre de buscar:
cree un archivo nombres.txt con el contenido de:
Juan Antonio
Pedro Madrid
Lucas Bar
lo ejecutas de esta forma:
[lucas] Lucas.pl Juan
Le pasas como argumento al programa la cadena a buscar en este caso Juan: la Variable $ARGV[0] recibe el valor:
haces un open del archivo y pasas el puntero a un arreglo, lo recorres y en cuentras la cadena que buscabas en este caso Juan.
Si no es lo que necesitas me puedes escribir no hay problema.
#!/usr/bin/perl
$ARGV[0];
print "ARGV: $ARGV[0]\n";
open(IN,"nombres.txt");
@data=<IN>

foreach $line (@data)
{
$sw = 0;
$sw = 1 if($line =~/$ARGV[0]/gi);
if($sw == 1)
{
print "Se encontro el Nombre de: $line\n";
$sw = 0;
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:buscar dentro de un archivo

Publicado por cristian (11 intervenciones) el 30/04/2003 15:01:11
Me falto cerrar el archivo...
#!/usr/bin/perl
$ARGV[0];
print "ARGV: $ARGV[0]\n";
open(IN,"nombres.txt");
@data=<IN>

foreach $line (@data)
{
$sw = 0;
$sw = 1 if($line =~/$ARGV[0]/gi);
if($sw == 1)
{
print "Se encontro el Nombre de: $line\n";
$sw = 0;
}
}

close (IN);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:buscar dentro de un archivo

Publicado por Carlos Alberto Betancur (1 intervención) el 04/09/2009 18:23:54
Hola, yo tengo el mismo problema, tengo el siguiente archivo ( esta es una parte de el:

# tsw state #
dev=tsw00 sys_0=sby sys_1=act md=dlm

# dtic state #
dev=dtic0000 sys_0=sby sys_1=act md=dlm
dev=dtic0001 sys_0=sby sys_1=act md=dlm
dev=dtic0003 sys_0=sby sys_1=act md=dlm
dev=dtic0006 sys_0=act sys_1=flt md=sgm
dev=dtic0007 sys_0=act sys_1=ous md=sgm

# loc state #
dev=loc0002 sys_0=act sys_1=flt md=sgm

# dltc state #
dev=dltc0004 sys_0=act sys_1=flt md=sgm
dev=dltc0005 sys_0=act sys_1=ous md=sgm
dev=dltc0008 sys_0=act sys_1=ous md=sgm

Necesito que cuando encuentre =flt o =ous me imprima toda la linea, es decir que el resultado sea:

dev=dtic0006 sys_0=act sys_1=flt md=sgm
dev=dtic0007 sys_0=act sys_1=ous md=sgm
dev=loc0002 sys_0=act sys_1=flt md=sgm
dev=dltc0004 sys_0=act sys_1=flt md=sgm
dev=dltc0005 sys_0=act sys_1=ous md=sgm
dev=dltc0008 sys_0=act sys_1=ous md=s

Muchas gacias por su ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:buscar dentro de un archivo

Publicado por Alejandro (4 intervenciones) el 30/04/2003 21:50:28
Ni vale la pena escribir un programa...

perl -ne 'print if /juan/' tuarchivo.txt

Si quieres imprimir el numero de linea:

perl -ne 'print \"$.: $_\" if /juan/' tuarchivo.txt

Es todo..

Consejo: No pienses en C cuando escribas Perl
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:buscar dentro de un archivo

Publicado por eial (7 intervenciones) el 02/08/2003 11:58:48
El primero, funciona pero esta mal programado...

una forma facil es ubicar los valores con un salto de linea...

pedro
juan
pepe

para conseguir juan, haces:

open(ARCHIVO,$nombre_del_archivo);

while (<ARCHIVO>)

{

chop;

if ($valor_externo_a_comparar =~ /^$_$/)

{

print;

}

}

close(ARCHIVO);

si valor externo es juan imprime juan como salida, si pones juan perez cambia el regexp por \b$_\b...
suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar