• Publicidad

Tratamiento de cadenas de texto largas

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

Tratamiento de cadenas de texto largas

Notapor gionzhalo » 2008-09-05 02:40 @152

Buenas:

Tengo un problema con unas cadenas largas de texto, necesito sacar una parte específica de ellas pero no lo consigo.

Las cadenas en cuestión son de este tipo, aunque no todas son iguales

Código: Seleccionar todo
====> 52bd1ea2-780f-71dd-1634-0ad781020000 43d3311a-8dd2-71dc-12b8-0ad781020000 1 -1407386946 20 COLG-SEV-571-RD1.oss 1 181895426 12 oss-ap-1.oss 0 0 16 0 0 0 1220264309 1220264312 0 2 9 1 181895426 12 oss-ap-1.oss 0 0 12 0 0 0  0 0 1220264650 0  10 Traps_SNMP 9 SNMPTraps 4 SNMP 3 Fa4 0  119 /usr/bin/perl /opt/OV/SCRIPTS/procesa_alarmas.pl SNMPTraps 52bd1ea2-780f-71dd-1634-0ad781020000 1220264309 Fa4 OV_IF_Up 0  61 IF Fa4 Up   Root Cause: COLG-SEV-571-RD1.oss Fa4 --Sev Normal 1824 Generic: 6; Specific: 58916866; Enterprise : .1.3.6.1.4.1.11.2.17.1;


Necesito sacar dos fechas en formato epoch y el texto de la alarma que siempre empieza por "Root Cause:":
* 1220264309 1220264312
* Root Cause: COLG-SEV-571-RD1.oss Fa4 --Sev Normal 1824 Generic: 6; Specific: 58916866; Enterprise: .1.3.6.1.4.1.11.2.17.1;

A ver si podéis ayudarme que ando ya desesperado con este tema.

Gracias y saludos.
gionzhalo
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-09-05 02:31 @146

Publicidad

Notapor gionzhalo » 2008-09-05 04:36 @233

Ya lo he conseguido.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$_=~/^[\s\S]*([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])\s([0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9])[\s\S]*[\w]*-[\w]*-[\w]*-[\w]*-[\w]*\s[\d]*\s([\s\S]*)$/
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Un poco chapuza pero bueno, ¡funciona! :lol:
gionzhalo
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-09-05 02:31 @146

Notapor explorer » 2008-09-05 04:38 @234

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

Esta es una posible solución
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

my $linea = "====> 52bd1ea2-780f-71dd-1634-0ad781020000 43d3311a-8dd2-71dc-12b8-0ad781020000 1 -1407386946 20 COLG-SEV-571-RD1.oss 1 181895426 12 oss-ap-1.oss 0 0 16 0 0 0 1220264309 1220264312 0 2 9 1 181895426 12 oss-ap-1.oss 0 0 12 0 0 0  0 0 1220264650 0  10 Traps_SNMP 9 SNMPTraps 4 SNMP 3 Fa4 0  119 /usr/bin/perl /opt/OV/SCRIPTS/procesa_alarmas.pl SNMPTraps 52bd1ea2-780f-71dd-1634-0ad781020000 1220264 309 Fa4 OV_IF_Up 0  61 IF Fa4 Up   Root Cause: COLG-SEV-571-RD1.oss Fa4 --Sev Normal 1824 Generic: 6; Specific: 58916866; Enterprise : .1.3.6.1.4.1.11.2.17.1;";

my ($tiempo1,$tiempo2,$causa);

if (($tiempo1,$tiempo2,$causa) = $linea =~ m/\b(\d{10}) (\d{10})\b.+(Root Cause: .+$)/simo) {
    print "$tiempo1,$tiempo2,$causa \n";
}

__END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Otra posible solución es la extracción de datos por posición:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my ($tiempo1,$tiempo2) = (split " ", $linea)[17,18];
my ($causa) = $linea =~ m/(Root Cause: .+$)/simo;
print "$tiempo1,$tiempo2,$causa \n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Actualización: Reeditada la solución viendo que solo es una 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 gionzhalo » 2008-09-09 01:54 @121

Ey, muchas gracias compañero. Esta solución está mucho mejor que la mía. :lol:

Saludos.
gionzhalo
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2008-09-05 02:31 @146


Volver a Básico

¿Quién está conectado?

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