Perl Help extract an extra data from the input file

0

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);
    
asked by user26977 04.01.2017 в 20:37
source

0 answers