Bonjour,
Je souhaite extraire des valeurs dans une chaine de caractères d'un fichier txt:
"04-08 09:36:40.589578 1570 1836 I use-Rlog/RLOG-GSM: getLTELevel - rsrp:-119 snr:-12 rsrpIconLevel:0 snrIconLevel:1"
Quand la chaine de caractères "getLTELevel est détectée, je récupère la date, l'heure, et les valeurs rsrp et snr sous la forme suivante dans un fichier texte.
04-08;09:36:40.589578;-119;-12
J'ai effectué simplement un script bash comme ci-dessous.
Cependant, je souhaite le faire également en Perl. J'ai essayé comme ci-dessous mais je dois pas avoir mis les bonnes expressions régulières.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 #!/bin/sh OUT=$1.csv echo "date, time, rsrp, snr" > $OUT grep getLTELevel radio_log | grep rsrp | awk '{ print $1 ", " $2 ", " $9 ", " $10 }' | sed -e 's#rsrp:##' -e 's#snr:##' >> $OUT
Auriez-vous des idées s'il vous plaît?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #!/usr/bin/perl use strict; use Win32::OLE; use Win32::OLE::Variant; # Global variables my $nb_fileIN_line = 0; my $file_in = shift; my $file_out = shift; my $line; my $time; my $date; # Open Log File open FILE_IN, $file_in or die("cannot open $file_in"); # Open Log File parsed open FILE_OUT, ">" . $file_out or die("cannot open $file_out for writing"); printf FILE_OUT "Date;Time;rsrp;snr\n"; # read Input file line by line while ($line = <FILE_IN>){ if ($line =~ /\[getLTELevel\]\s*(\d{2}:\d{2}:\d{2}:\d{3})\s+(\d{4}\/\d{2}\/\d{2})/){ $time = $1; $date = $2; } printf FILE_OUT "%s;%s;%s;%d\n", $date , $time, $1; } close FILE_IN; close FILE_OUT;
Partager