use strict;
my %CELL;
my %CELL_TYPE_COUNT;
my $timestamp;
my $hour;
while (my $line = <DATA>) {
if ($line =~ m|\d{1,2}/\d{1,2}/\d{2} ((\d{1,2}):\d{1,2}:\d{1,2})|) {
#10/17/11 18:25:20 #578030
$timestamp = $1;
$hour = $2;
}
if ($line =~ /CELL\s+(\d+)\s+(.+?),.+?HEH/) { # take CELL number into
$1 and the information after the number (and before the first comma)
into $2
if ((17 <= $hour)&&($hour <=21)) {
$CELL{$hour}{$1}{$2}++;
$CELL_TYPE_COUNT{$2}++;
}
}
}
# header
print "HOUR, CELL,".join(", ",sort keys %CELL_TYPE_COUNT)."\n";
# body
foreach my $hour (sort keys %CELL) { # you can use map function, but
it never sits well on my brain
foreach my $cellNo (sort keys %{$CELL{$hour}}) {
print "$hour, $cellNo";
foreach my $info (sort keys %CELL_TYPE_COUNT) {
if (exists $CELL{$hour}{$cellNo}{$info}) {
print ", $CELL{$hour}{$cellNo}{$info}";
}
else {
print ", 0";
}
}
print "\n";
}
}
__DATA__
10/17/11 10:25:20 #578030
25 REPT:CELL 221 CDM 2, CRC, HEH
SUPPRESSED MSGS: 0
ERROR TYPE: ONEBTS MODULAR CELL ERROR
SET: MLG BANDWIDTH CHANGE
MLG 1 BANDWIDTH = 1536
00 00 06 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00
10/17/11 18:25:20 #578031
25 REPT:CELL 221 CDM 2, CRC, HEH
SUPPRESSED MSGS: 0
ERROR TYPE: ONEBTS MODULAR CELL ERROR
SET: DS1-MLG ASSOCIATION CHANGE
MLG 1 DS1 1,2
00 00 00 00 00 00 00 00
03 00 00 00 01 00 05 05
#my own test data
10/17/11 18:25:20 #578031
25 REPT:CELL 220 CDM 1, CRC, HEH
10/17/11 18:25:20 #578031
25 REPT:CELL 220 CDM 1, CRC, HEH
10/17/11 19:25:20 #578031
25 REPT:CELL 220 CDM 1, CRC, HEH
On Tue, Oct 18, 2011 at 1:16 AM, Chris Stinemetz
<[email protected]> wrote:
> On Mon, Oct 17, 2011 at 10:57 PM, Leo Susanto <[email protected]> wrote:
>> From looking at the regex
>>
>>> if ($line =~
>>> /17|18|19|20|21+:(\d+):(\d+)+\n+\n+CELL\s+(\d+)\s+(.+?),.+?HEH/){
>>
>> against the data
>>
>>> 10/17/11 18:25:20 #578030
>>>
>>> 25 REPT:CELL 221 CDM 2, CRC, HEH
>>> SUPPRESSED MSGS: 0
>>> ERROR TYPE: ONEBTS MODULAR CELL ERROR
>>> SET: MLG BANDWIDTH CHANGE
>>> MLG 1 BANDWIDTH = 1536
>>
>> I would assume $1 and $2 wouldn't match to anything plus $5 doesn't exist.
>>
>> Could you please let us know which part of the data you want to extract?
>>
>> Fill in the blanks
>> $1=
>> $2=
>> $3=
>> $4=
>> $5=
>>
>
> Thanks everyone. I hope this clarifies what I am trying to match. For
> example with this input:
>
> 10/17/11 18:25:20 #578030
>
> 25 REPT:CELL 221 CDM 2, CRC, HEH
> SUPPRESSED MSGS: 0
> ERROR TYPE: ONEBTS MODULAR CELL ERROR
> SET: MLG BANDWIDTH CHANGE
> MLG 1 BANDWIDTH = 1536
>
>
> $1= Match the time stamp Hour:Min:Sec only if the hour is >= 17 and hour <= 21
> $2= capture CELL number
> $3= capture the information after the CELL number (and before the first comma)
>
> Thank you,
>
> Chris
>
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/