• Publicidad

Separar un archivo log

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

Notapor explorer » 2007-02-15 17:29 @770

Puedes hacer los s///; para quitar todos los espacios, por ejemplo: $elementos[4] =~ s/bytes//g;

¿Cómo quieres luego separar los valores a la hora de presentar el resultado?
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

Publicidad

Notapor explorer » 2007-02-15 17:33 @773

Los s/ / /g; no hacen nada... estás sustituyendo cada espacio en blanco por 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

Una posible solución

Notapor explorer » 2007-02-15 18:05 @795

Con este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
while ( $linea = <> ) {
  @campos = split(" ", $linea);
  @fecha  = split(":", $campos[3]);
  chop( @campos[4,5,6,12] );
  @ip1 = split ":", $campos[10];
  @ip2 = split ":", $campos[12];
  #print join(" ", $campos[2], @fecha, @campos[4,5,6,7], @ip1, @ip2), "\n";
  print 'insert into log (', join(',', map { "'$_'" } $campos[2], @fecha, @campos[4,5,6,7], @ip1, @ip2 ),');', "\n"';
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
y con la entrada:
perl kk.pl kk.txt
siendo kk.txt el fichero a tratar:
Código: Seleccionar todo
Tue Feb 13 19:07:35 2007; TCP; eth0; 1500 bytes; from 69.28.145.24:80 to 10.1.42.251:1341; first packet
Tue Feb 13 19:07:35 2007; TCP; eth0; 1500 bytes; from 10.1.103.235:2418 to 204.15.20.20:80; first packet
Tue Feb 13 19:07:36 2007; TCP; eth0; 52 bytes; from 10.1.42.251:1341 to 69.28.145.24:80; first packet
sale:
Código: Seleccionar todo
insert into log ('13','19','07','35','2007','TCP','eth0','1500','69.28.145.24','80','10.1.42.251','1341');
insert into log ('13','19','07','35','2007','TCP','eth0','1500','10.1.103.235','2418','204.15.20.20','80');
insert into log ('13','19','07','36','2007','TCP','eth0','52','10.1.42.251','1341','69.28.145.24','80');
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 jeanmarc_tec » 2007-02-15 18:51 @827

muchas gracias me avia quedado ya con unas 15 lineas mas pero con tu solucion es mucho mas rapido y menos tiempo de procesamiento

muchas gracias .... :lol:


explorer
jeanmarc_tec
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2007-02-01 15:10 @673

Notapor creating021 » 2007-02-15 20:08 @881

Claro, mi problema fue tan estúpido! :lol:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/env perl
use strict;

open FL, "algo.log" or die "Oops, algo.log: $!\n";
while (my $linea = <FL>){
  chomp;
  $linea =~ /(:|from|to)/ /g;
  my @elementos = split /;/, $linea;
  print "$elementos[1] $elementos[2] $elementos[3] $elementos[4]\n";
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor jeanmarc_tec » 2007-02-16 01:49 @117

Hola explorer molestando nuevamente tengo una pequeña duda referente a lo anterior.

Cómo puedo hacer que la línea que tenga icmp así como está

insert into log
Código: Seleccionar todo
(dia,hora,minuto,segundo,ano,protocolo,interface,tpaquete,ipdestino,ptodestino,iporigen,ptorigen) values ('13','19','07','37','2007','ICMP','eth0','76','10.1.16.1','10.1.100.220');


la cambia por esta

Código: Seleccionar todo
insert into log (dia,hora,minuto,segundo,ano,protocolo,interface,tpaquete,ipdestino,ptodestino,iporigen,ptorigen) values ('13','19','07','37','2007','ICMP','eth0','76','10.1.16.1',' 0','10.1.100.220','0');


si me prodrian ayudar te lo agredece mucho

:cry: :lol:
jeanmarc_tec
Perlero nuevo
Perlero nuevo
 
Mensajes: 15
Registrado: 2007-02-01 15:10 @673

Notapor explorer » 2007-02-16 04:15 @219

Pues... con un 'if'.
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

Anterior

Volver a Básico

¿Quién está conectado?

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