I have a form in the following format:
header1
DATE AND TIME and some other info irrelevant
OBJECT: 'TYPE1'
NUMBER VALUE NAME
1 value1 TOT
2 value2 SUCC
3 value3 FAIL
DATE AND TIME and some other info irrelevant
OBJECT: 'TYPE2'
NUMBER VALUE NAME
1 value1 TOT
2 value2 SUCC
3 value3 FAIL
.
.
.
header2
DATE AND TIME
OBJECT: 'TYPE1'
NUMBER VALUE NAME
1 value1 TOT
2 value2 SUCC
3 value3 FAIL
DATE AND TIME and some other info irrelevant
OBJECT: 'TYPE2'
NUMBER VALUE NAME
1 value1 TOT
2 value2 SUCC
3 value3 FAIL
The required output is as follows:
HEADER DATE AND TIME OBJECT TYPE TOT SUCC FAIL
header1 date and time object type1 value1 value2 value3
header1 date and time object type2 value1 value2 value3
.
.
.
header2 date and time object type1 value1 value2 value3
header2 date and time object type2 value1 value2 value3
With the following script I managed to get all the columns except the first HEADER, I would like some help to also be able to get this data from the source file.
use warnings;
use Data::Dumper qw(Dumper);
use Text::TabularDisplay;
open INPUT, "test.log" or die $!;
open OUTPUT, ">result.log" or die $!;
my @array;
print OUTPUT "OBJECT COUNTER DATE NMAPTOT NMAPSUCC\n";
while (@array = <INPUT>) {
$i = 0;
foreach my $line (@array) {
if ($line =~ m/(OK)((.*))/) {
my $a = $array[$i+1];
my $b = $array[$i+2];
my $c = $array[$i+3];
my $d = $array[$i+4];
my $e = $array[$i+5];
my $f = $array[$i+6];
my $g = $array[$i+7];
push (@array, $e);
push (@array, $f);
push (@array, $g);
$TOT = substr $e, 8, 10;
$SUC = substr $f, 8, 10;
$TOT =~ s/\s+$//;
$SUC =~ s/\s+$//;
my ($DATE) = substr $line, 4, 13;
my ($COUNT) = ($b =~ /'(.*)\'/);
my ($OBJ) = $b =~ s/\:.*//sr;
push (@array, $TOT);
push (@array, $SUC);
print OUTPUT $OBJ, ' ', $COUNT, ' ',$DATE, $TOT, $SUC, "\n";
}
$i++;
}
}
close(INPUT);
close(OUTPUT);