• Publicidad

Tratar línea

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

Tratar línea

Notapor angelltroa » 2010-04-14 12:59 @583

Hola a todos,

Estoy haciendo un programa que me lee los logs continuamente; el problema lo tengo cuando quiero seleccionar las líneas. Por ejemplo, lo que sería en una línea de comandos normal:

cat /var/log/auth.log|grep failures|awk '{print $2, $3, $12}'

Me quedo solo con los campos 2, 3 y 12 de las líneas que contengan la palabra failure. Mi problema es que no sé cómo hacer este grep() con Perl, ya que cuando trato de hacer:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
open (DATA,$log_file)
while ($line = <DATA>) {
   `echo $line |grep failures|awk '{print $2, $3, $12}'`;
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¡ me peta !

¿Me podéis ayudar? Hoy es mi primer día con Perl... :)
angelltroa
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-04-14 06:11 @299

Publicidad

Re: Tratar línea

Notapor explorer » 2010-04-14 13:53 @620

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

Hay un par de fallos en el código...

* A la línea de open() le falta un ';' al final
* Yo creo que es 'failure', no 'failures'
* En awk, creo que te falta poner una coma entre los argumentos de salida
* Muchas de las operaciones que harías en shell, las puedes hacer perfectamente en Perl:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5.  
  6. my $log_file = '/var/log/auth.log';
  7.  
  8. open (my $DATA, "<$log_file") or die "ERROR: No puedo abrir el $log_file: $!\n";
  9.  
  10. while (my $linea = <$DATA>) {
  11.     if ($linea =~ /failure/) {          # echo $line |grep failure
  12.         my @campos = split " ", $linea; # |awk
  13.         print "@campos[1,2,11]\n";      #   '{print $2, $3, $12}'
  14.     }
  15. }
  16.  
  17. close $DATA;
  18.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Si estás empezando con Perl, es siempre aconsejable:
* usar el modo de programación "estricto", para evitar el demasiado libertinaje que te da Perl
* usar el modo de avisos "warning", para que avise de problemas comunes de escritura
* "diagnostics" te da aún más información de esos avisos.
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: Tratar línea

Notapor angelltroa » 2010-04-15 02:57 @165

Muchísimas gracias, explorer, ¡ es justo lo que andaba buscando ! ¡ Se agradece cuando estás empezando con un lenguaje y te encuentras personas como tú !

¡ Un saludo y hasta pronto !
angelltroa
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2010-04-14 06:11 @299


Volver a Básico

¿Quién está conectado?

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