Perl - Extraer string en diferentes lineas de archivo de texto

 
Vista:
sin imagen de perfil

Extraer string en diferentes lineas de archivo de texto

Publicado por Melvin (1 intervención) el 13/11/2014 14:38:47
Buenos días, soy nuevo en perl, quisiera extraer algunos datos de varias lineas de texto, un ejemplo sería el siguiente_:



+++ UMTS-GSM 2014-11-12 09:54:33
O&M #2497354
%%DSP BTSENVSTAT: IDTYPE=BYNAME, BTSNAME="CORRALEJA1", ISMULTIDEMU=NO;%%
RETCODE = 0 Execution succeeded.

DSP BTSENVSTAT Result
---------------------
Humidity Temperature

50.20% 20.80degree Celsius
(Number of results = 1)

LST ENVTHD Result
-----------------
Temperature Lower Limit Temperature Upper Limit Humidity Lower Limit Humidity Upper Limit

-5.0degree Celsius 28.0degree Celsius 15.0% 85.0%
(Number of results = 1)


--- END



El resultado que deseo obtener es el siguiente:

2014-11-12 09:54:33 CORRALEJA1 20.80


Y así sucesivamente para todas las apariciones en el archivo adjunto.

Agradezco realmente cualquier orientación que puedan brindarme.

MM
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
Imágen de perfil de Joaquin Ferrero
Val: 56
Oro
Ha mantenido su posición en Perl (en relación al último mes)
Gráfica de Perl

Extraer string en diferentes lineas de archivo de texto

Publicado por Joaquin Ferrero (31 intervenciones) el 15/11/2014 03:50:07
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl
use v5.18;
use File::Slurp;
use autodie;
 
my $rx_time = qr/(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2})/;	# fecha y hora
my $rx_loc  = qr/BTSNAME="(.+?)"/;				# localización
my $rx_temp = qr/% (.+?)degree/;				# temperatura
 
 
my $archivo = read_file('kk.txt');				# leemos el archivo
 
while ($archivo =~ / ^ \+\+\+[ ]UMTS (.+?) ^ ---[ ]END /gmsx) {	# para todos los registros
 
    my $registro = $1;						# interior del registro
 
    my($fecha) = $registro =~ $rx_time;				# extraemos valores
    my($loc  ) = $registro =~ $rx_loc;
    my($temp ) = $registro =~ $rx_temp;
 
    say join " " => $fecha, $loc, $temp;			# y los imprimimos
}

Saludos desde Perl en Español.
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