How can I iterate over this three level hash printing the results as

Hour\tCell\tHEH_Type\HEH_Count

$VAR1 = {
          '00' => {
                    '875' => {
                               'CDM 1, CCU 1, CE 5' => '1'
                             },
                    '13' => {
                              'CDM 1, 2, CBR 2, 5MHz' => '6'
                            },
                    '830' => {
                               'CTRM' => '2'
                             },
                    '983' => {
                               'CDM 1, CCU 2, NO ACCESS' => '1',
                               'CTRM' => '2',
                               'CDM 1, CCU 1, NO ACCESS' => '1'
                             },
                    '818' => {
                               'CTRM' => '3'
                             }
                  }
        };
The guts of my program so far is:

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;
use diagnostics;

my %CELL;
my %CELL_TYPE_COUNT;
my $timestamp;
my $hour;
while (my $line = <>) {
  if ($line =~ m|\d{1,2}/\d{1,2}/\d{2} ((\d{1,2}):\d{1,2}:\d{1,2})|) {
  $timestamp = $1;
  $hour = $2;
  }
  if ($line =~ /CELL\s*(\d+)\s*(.*),\s*HEH/) {
    if ((0 <= $hour)&&($hour <=23)) {
    $CELL{$hour}{$1}{$2}++;
    $CELL_TYPE_COUNT{$2}++;
    }
  }
}
# header
print "HOUR\tCELL\tHEH_TYPE\tHEH_COUNT\n";
# body
foreach my $hour (sort {$a <=> $b} keys %CELL){
  foreach my $cellNo (sort {$a <=> $b} keys %{$CELL{$hour}}) {
    print "$hour\t $cellNo\t";
    foreach my $hehCount (keys %CELL_TYPE_COUNT) {
      if (exists $CELL{$hour}{$cellNo}{$hehCount}) {
      print "\t $CELL{$hour}{$cellNo}{$hehCount}";
      }
    }
    print "\n";
  }
}
print Dumper \%CELL;
print Dumper \%CELL_TYPE_COUNT;

Reply via email to