• Publicidad

Editar Logs

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

Editar Logs

Notapor crodriguez » 2013-01-03 20:04 @877

Hola de nuevo. Hace un unos días trataba de eliminar nombres repetidos de un archivo que es un log, yo estoy trabajando con putty en un servidor de Linux y bueno, en sí yo tengo archivos con nombres así: named-queries.log.1. Todo esto en Linux y dentro de esos archivos tengo algo así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
(192.168.99.1)12-Nov-2012 11:30:41.600 queries: info: client 192.168.99.2#58283: query: 99.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:30:56.068 queries: info: client 192.168.99.2#31132: query: erickdelcastillo.com IN SOA -E (192.168.99.1)
12-Nov-2012 11:31:01.124 queries: info: client 192.168.49.2#29344: query: delcastillo.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:31:10.603 queries: info: client 192.168.99.2#9174: query: 100.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:31:21.556 queries: info: client 192.168.99.11#58957: query: teredo.ipv6.microsoft.com IN A + (192.168.99.1)
12-Nov-2012 11:31:23.854 queries: info: client 192.168.99.11#56063: query: teredo.ipv6.microsoft.com IN A + (192.168.99.1)
12-Nov-2012 11:31:23.970 queries: info: client 192.168.99.11#60889: query: teredo.ipv6.microsoft.com IN A + (192.168.99.1)
12-Nov-2012 11:31:24.120 queries: info: client 192.168.99.11#62554: query: teredo.ipv6.microsoft.com IN A + (192.168.99.1)
12-Nov-2012 11:31:28.183 queries: info: client 192.168.99.11#57741: query: http://www.msftncsi.com IN A + (192.168.99.1)
12-Nov-2012 11:31:29.121 queries: info: client 192.168.99.11#54420: query: http://www.msftncsi.com IN AAAA + (192.168.99.1)
12-Nov-2012 11:31:29.336 queries: info: client 192.168.99.11#56726: query: http://www.msftncsi.com IN A + (192.168.99.1)
12-Nov-2012 11:31:29.610 queries: info: client 192.168.99.11#63129: query: http://www.msftncsi.com IN AAAA + (192.168.99.1)
12-Nov-2012 11:31:30.140 queries: info: client 192.168.99.11#63129: query: http://www.msftncsi.com IN AAAA + (192.168.99.1)
12-Nov-2012 11:31:30.670 queries: info: client 192.168.99.11#63129: query: http://www.msftncsi.com IN AAAA + (192.168.99.1)
12-Nov-2012 11:31:36.619 queries: info: client 192.168.99.2#43156: query: delcastillo.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:31:40.697 queries: info: client 192.168.99.11#52032: query: notify40.dropbox.com IN A + (192.168.99.1)
12-Nov-2012 11:31:51.134 queries: info: client 192.168.49.2#17471: query: 131.102.190.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:31:51.812 queries: info: client 192.168.99.11#58227: query: dnl-01.geo.kaspersky.com IN A + (192.168.99.1)
12-Nov-2012 11:31:57.103 queries: info: client 192.168.99.2#10682: query: 89.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:00.118 queries: info: client 192.168.99.2#59675: query: 131.102.190.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:18.623 queries: info: client 192.168.49.2#4754: query: binaria.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:22.628 queries: info: client 192.168.49.2#1132: query: 49.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:23.602 queries: info: client 192.168.99.2#6819: query: binaria.com.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:25.561 queries: info: client 192.168.49.1#11384: query: 49.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:38.624 queries: info: client 192.168.49.2#6127: query: 89.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:44.556 queries: info: client 192.168.49.1#10031: query: 89.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:32:51.814 queries: info: client 192.168.99.11#53130: query: dnl-01.geo.kaspersky.com IN A + (192.168.99.1)
12-Nov-2012 11:32:52.126 queries: info: client 192.168.49.2#41130: query: cuadros.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:19.561 queries: info: client 192.168.49.1#62913: query: 100.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:29.056 queries: info: client 192.168.49.1#46798: query: delcastillo.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:31.055 queries: info: client 192.168.49.1#38661: query: cuadros.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:41.454 queries: info: client 192.168.49.1#11678: query: binaria.com.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:42.060 queries: info: client 192.168.49.1#56133: query: 131.102.190.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:44.126 queries: info: client 192.168.49.2#56170: query: 100.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:46.558 queries: info: client 192.168.49.1#29676: query: binaria.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:33:51.812 queries: info: client 192.168.99.11#56189: query: dnl-01.geo.kaspersky.com IN A + (192.168.99.1)
12-Nov-2012 11:33:55.557 queries: info: client 192.168.49.1#12571: query: 99.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:34:05.625 queries: info: client 192.168.49.2#13091: query: erickdelcastillo.com IN SOA -E (192.168.99.1)
12-Nov-2012 11:34:14.602 queries: info: client 192.168.99.2#1110: query: binaria.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:34:15.057 queries: info: client 192.168.49.1#2555: query: erickdelcastillo.com IN SOA -E (192.168.99.1)
12-Nov-2012 11:34:20.133 queries: info: client 192.168.49.2#40406: query: binaria.com.pe IN SOA -E (192.168.99.1)
12-Nov-2012 11:34:22.065 queries: info: client 192.168.99.2#27376: query: 49.168.192.in-addr.arpa IN SOA -E (192.168.99.1)
12-Nov-2012 11:34:23.526 queries: info: client 192.168.99.23#52412: query: orcart.facebook.com IN AAAA + (192.168.99.1)
12-Nov-2012 11:34:23.680 queries: info: client 192.168.99.23#57860: query: orcart.fa
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

y bueno, de esos archivo solo quiero editarlos para que al final solo me queden las direcciones web, como
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
binaria.pe
orcart.facebook.com
delcastillo.pe
binaria.pe
notify40.dropbox.com
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
etc., y luego, bueno, después de editar ese archivo y obtener todas las direcciones, editar el archivo para que solo queden las que son de dominios .pe para luego eliminar las repetidas y por último todo eso pasarlo a una base de datos.

Disculpen que pida esto pero la verdad es que intenté con todo pero nada me corre bien y mayormente tengo errores en la sintaxis, en Linux logré hacer una parte con esto:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. sed 's/.*query: //' named-quies.log
  2. sed 's/\.pe.*$/\.pe/g'
  3. cat named-queries.log | grep '.pe ' | sed 's/.*query: //' | sed 's/\.pe.*$/\.pe/g'
  4. cat named-queries.log | grep '.pe ' | sed 's/.*query: //' | sed 's/\.pe.*$/\.pe/g' | sort | uniq
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Todo esto lo uso en el shell de Linux pero me gustaría ponerlo en un script de Perl y cuando lo uso en el shell de Linux me da una lista con los nombre de direcciones .pe pero nunca modifica el archivo original. Simplemente me lo muestra en pantalla y yo quiero que edite el archivo o que cree uno nuevo para posteriormente cada dirección pasarla a una base de datos.

Por favor, necesito ayuda. Ya intenté con varias cosas pero la verdad que no entiendo bien este lenguaje. Normalmente yo sé programar en C# y Visual Basic y esto es nuevo para mi.

P.D.: soy estudiante de informática.

De antemano muchas gracias por toda la ayuda que me están brindando y nuevamente disculpen que pida todo esto.
crodriguez
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-12-29 20:19 @888
Ubicación: Peru

Publicidad

Re: Editar Logs

Notapor explorer » 2013-01-03 22:01 @959

Si no te funciona el código, lo normal es que lo publiques aquí para que veamos dónde está el problema.

Esta es una posible solución. La salida es hacia la salida estándar, con lo que puedes entubarla hacia cualquier otro sitio o archivo. O también puedes modificar el programa para que lo guarde en el archivo que quieras (dudo que quieras modificar el archivo original de log, como dices).

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.14;
  3. use autodie;                    # «Es mejor morir que regresar con deshonor» --proverbio Klingon
  4.  
  5. my %URL_peruanas;
  6.  
  7. open my $LOG, '<', 'named-queries.log.1';   # abrimos archivo
  8. while (<$LOG>) {                            # para cada línea
  9.     if (/query: (\S+[.]pe) /) {             # si encontramos el patrón
  10.         $URL_peruanas{$1} = 1;              # nos quedamos con la URL
  11.     }
  12. }
  13. close $LOG;
  14.  
  15. for my $URL (sort keys %URL_peruanas) {     # recorremos de forma ordenada las URL encontradas
  16.     say $URL;                               # y las imprimimos
  17. }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Y aquí tienes una versión para ejecutarla desde la línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl -anE '/query: (\S+[.]pe) / and $URL{$1}=1; END { say for sort keys %URL }' named-queries.log.1
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Queda muy corta :lol: ... y hace lo mismo que el programa anterior.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Editar Logs

Notapor crodriguez » 2013-01-04 11:02 @501

Hola, muchísimas gracias por la ayuda y disculpa la ignorancia pero no entiendo si es mi versión de Perl o está mal instalado pero me sale esto al correr el programa:

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. [root@crawler ~]# /root/logs/ns5/ccc.pl
  2. /root/logs/ns5/ccc.pl: line 2: use: command not found
  3. /root/logs/ns5/ccc.pl: line 3: use: command not found
  4. /root/logs/ns5/ccc.pl: line 5: my: command not found
  5. /root/logs/ns5/ccc.pl: line 8: syntax error near unexpected token `)'
  6. /root/logs/ns5/ccc.pl: line 8: `    while (<$LOG>) {                            # para cada línea'
  7. [root@crawler ~]#
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
crodriguez
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-12-29 20:19 @888
Ubicación: Peru

Re: Editar Logs

Notapor explorer » 2013-01-04 12:02 @543

Lo estás intentando ejecutar como un script shell, y claro, salen errores.

Soluciones:

1. pon la palabra perl delante:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. perl /root/logs/ns5/ccc.pl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


2. dale permisos de ejecución al script y pruebas:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. chmod +x /root/logs/ns5/ccc.pl
  2. /root/logs/ns5/ccc.pl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Si falla, es posible que la primera línea del script esté mal escrita (la línea con #!) o que el lugar donde esté Perl no sea /usr/bin/perl.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Editar Logs

Notapor crodriguez » 2013-01-05 00:21 @056

Buenas. Estuve probando hasta que funcionó, y bueno, creo que queda así, y ya solo me faltaría eliminar todos los que se repiten para, posteriormente, todo lo que saque en el nuevo archivo lo pase a la base de datos. Acá les dejo el código:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2.  
  3. use v5.12;
  4. use autodie;
  5.  
  6. my %URL_peruanas;
  7. open my $LOG, '<', '/root/logs/ns5/named-queries.log.1';
  8. open my $LOG2, '>', '/root/logs/ns5/nuevo.1';
  9.  
  10. while (<$LOG>)
  11. {
  12.         if (/query: (\S+[.]pe) /)
  13.                 {
  14.                         $URL_peruanas{$1} = 1;
  15.                 }
  16. }
  17.  
  18. close $LOG;  
  19.  
  20. for my $URL (sort keys %URL_peruanas)
  21. {
  22.         say $URL;
  23.         $URL=~ tr/[A-Z]/[a-z]/;
  24.         print $LOG2 $URL,"\n";
  25. }
  26.  
  27. close $LOG2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Nuevamente, muchas gracias por toda la ayuda :D
crodriguez
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-12-29 20:19 @888
Ubicación: Peru

Re: Editar Logs

Notapor explorer » 2013-01-05 08:21 @390

En Perl existe la función lc(), que convierte una cadena de caracteres de mayúsculas a minúsculas, así que puedes simplificar la línea 23. Además, está mal escrita. tr/// no admite las clases de caracteres. Los rangos de caracteres se escriben sin usar los corchetes. Más información en perlop.

En la línea 24, ya que estás usando Perl v5.14, puedes usar say(). Entonces, todo queda así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.         $URL = lc $URL;
  2.         say $LOG2 $URL;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Editar Logs

Notapor crodriguez » 2013-01-07 10:36 @484

Hola de nuevo...
Bueno, nuevamente muchas gracias por toda la ayuda que me están brindando y, bueno, en esta oportunidad quería compartirles el código que ya me funciona de bien pero quería hacer una consulta: ¿cómo puedo hacer para que antes de que genere el nuevo archivo con la lista me elimine todos los que se repiten para de ahí generar el nuevo archivo ya con solo nombres únicos? Leí que se puede usar un comando "uniq" pero la verdad que no sé cómo. Agradecería que me ayuden, por favor, y bueno, acá el código :

#!/usr/bin/perl

use v5.12;
use autodie;

my %URL_peruanas;
open my $LOG, '<', '/root/logs/ns5/named-queries.log.1';
open my $LOG2, '>', '/root/logs/ns5/nuevo.1';

while (<$LOG>)
{
if (/query: (\S+[.]pe) /)
{
$URL_peruanas{$1} = 1;
}
}

close $LOG;

for my $URL (sort keys %URL_peruanas)
{
say $URL;
$URL=~ tr/[A-Z]/[a-z]/;
print $LOG2 $URL,"\n";
}

close $LOG2;

Muchas gracias, nuevamente :)
crodriguez
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-12-29 20:19 @888
Ubicación: Peru

Re: Editar Logs

Notapor explorer » 2013-01-07 11:47 @533

A mi no se me repite ninguna de las URL, en la salida... ¿a ti no te funciona?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Editar Logs

Notapor crodriguez » 2013-01-07 14:11 @633

Sí, a mi genera el archivo "nuevo.1" con este contenido:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
10\032smtp.delcastillo.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
imap.delcastillo.pe
imap.delcastillo.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.delcastillo.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.cuadros.pe
imap.delcastillo.pe
imap.delcastillo.pe
ns5.delcastillo.pe
ns5.delcastillo.pe
ns5.delcastillo.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
erick.com.pe
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Este es el resultado final corriendo el código anterior, pero hay direcciones que se repiten muchas veces como las anteriores.
crodriguez
Perlero nuevo
Perlero nuevo
 
Mensajes: 17
Registrado: 2012-12-29 20:19 @888
Ubicación: Peru

Re: Editar Logs

Notapor explorer » 2013-01-07 14:27 @644

A ver...

Con el ejemplo que pusiste en el primer mensaje, más este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.12;
  3. use autodie;                    # «Es mejor morir que regresar con deshonor» --proverbio Klingon
  4.  
  5. my %URL_peruanas;
  6.  
  7. open my $LOG, '<', 'named-queries.log.1';
  8. while (<$LOG>) {
  9.     if (/query: (\S+[.]pe) /) {
  10.         $URL_peruanas{lc $1} = 1;
  11.     }
  12. }
  13. close $LOG;
  14.  
  15. open my $LOG2, '>', 'nuevo.1';
  16. for my $URL (sort keys %URL_peruanas) {
  17.     say $LOG2 $URL;
  18. }
  19. close $LOG2;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
el resultado es:
Sintáxis: (nuevo.1) [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
binaria.com.pe
binaria.pe
cuadros.pe
delcastillo.pe
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
así que no entiendo cómo a ti te sale algo distinto...

Por favor, ejecuta mi código tal cual te lo he puesto aquí, y mira a ver si el archivo nuevo.1 contiene entradas únicas. Pero fíjate que estés leyendo el nuevo.1 correcto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

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

cron