awk to format data into table

Dear team,

Here is the input file from which in need to get output table with values from each blocks

as BC, DATE & TIME(Apr 29, 08:10),NSMSSMRLTOT ,NSMSSRSUCC ,NSMSCMTOT , NSMSCMRSUCC

more SHMSGSERV_FRMT
Thu Apr 30, 08:13 +03+0300 2020
GJ15_183_IPA03_EPA49

BC0 --------------------------------  BC0
                                      BC0
==================================================  BC0
Wed Apr 29, 08:10 +03+0300 2020 (OK)  BC0
--------------------------------------------------  BC0
SHMSGSERV: ''                         BC0
                                      BC0
Number       Value  Name              BC0
     1       75718  NSMSSMRLTOT       BC0
     2       69284  NSMSSRSUCC        BC0
     3       71264  NSMSCMTOT         BC0
     4       70947  NSMSCMRSUCC       BC0
     5        4785  NSMSRDOTOT        BC0
     6         380  NSMSRAOSUCC       BC0
     7        4292  NSMSCDOTOT        BC0
     8         383  NSMSCAOSUCC       BC0
     9          28  NSMSMARTOT        BC0
    10           0  NSMSNRFSMTOT      BC0
    11           0  NTBRSMS           BC0
    12           0  NTBRSMSFAIL       BC0
    13           0  NSMSNRFSMTOT3     BC0
    14           0  NSMSRDTOT2        BC0
    15           0  NSMSDBRS          BC0
==================================================  BC0
                                      BC0
==================================================  BC0
Wed Apr 29, 09:10 +03+0300 2020 (OK)  BC0
--------------------------------------------------  BC0
SHMSGSERV: ''                         BC0
                                      BC0
Number       Value  Name              BC0
     1      132640  NSMSSMRLTOT       BC0
     2      117741  NSMSSRSUCC        BC0
     3      121283  NSMSCMTOT         BC0
     4      120752  NSMSCMRSUCC       BC0
     5        4414  NSMSRDOTOT        BC0
     6         391  NSMSRAOSUCC       BC0
     7        3913  NSMSCDOTOT        BC0
     8         393  NSMSCAOSUCC       BC0
     9          29  NSMSMARTOT        BC0
    10           0  NSMSNRFSMTOT      BC0
    11           0  NTBRSMS           BC0
    12           0  NTBRSMSFAIL       BC0
    13           0  NSMSNRFSMTOT3     BC0
    14           0  NSMSRDTOT2        BC0
    15           0  NSMSDBRS          BC0
==================================================  BC0
                                      BC0
==================================================  BC0
Wed Apr 29, 10:10 +03+0300 2020 (OK)  BC0
--------------------------------------------------  BC0
SHMSGSERV: ''                         BC0
                                      BC0
Number       Value  Name              BC0
     1      136221  NSMSSMRLTOT       BC0
     2      120417  NSMSSRSUCC        BC0
     3      124147  NSMSCMTOT         BC0
     4      123444  NSMSCMRSUCC       BC0
     5        4717  NSMSRDOTOT        BC0
     6         557  NSMSRAOSUCC       BC0
     7        4316  NSMSCDOTOT        BC0
     8         560  NSMSCAOSUCC       BC0
     9          43  NSMSMARTOT        BC0
    10           0  NSMSNRFSMTOT      BC0
    11           0  NTBRSMS           BC0
    12           0  NTBRSMSFAIL       BC0
    13           0  NSMSNRFSMTOT3     BC0
    14           0  NSMSRDTOT2        BC0
    15           0  NSMSDBRS          BC0
==================================================  BC0
                                      BC0
==================================================  BC0
Wed Apr 29, 11:10 +03+0300 2020 (OK)  BC0
--------------------------------------------------  BC0
SHMSGSERV: ''                         BC0
                                      BC0
Number       Value  Name              BC0
     1      148035  NSMSSMRLTOT       BC0
     2      131664  NSMSSRSUCC        BC0
     3      135324  NSMSCMTOT         BC0
     4      134636  NSMSCMRSUCC       BC0
     5        4914  NSMSRDOTOT        BC0
     6         684  NSMSRAOSUCC       BC0
     7        4483  NSMSCDOTOT        BC0
     8         686  NSMSCAOSUCC       BC0
     9          64  NSMSMARTOT        BC0
    10           0  NSMSNRFSMTOT      BC0
    11           0  NTBRSMS           BC0
    12           0  NTBRSMSFAIL       BC0
    13           0  NSMSNRFSMTOT3     BC0
    14           0  NSMSRDTOT2        BC0
    15           0  NSMSDBRS          BC0
==================================================  BC0
                                      BC0


From below awk command ,the output as below. for first line only date and time printed whereas it should have all four values

That's because if your first printout trigger /-/ is hit, only that array element is set yet. On top, all further date/time stamps do not match the data printed with them; the data are shifted one line down.
Try finding another print trigger.

2 Likes

A possible solution :

$ cat ./eshaqur.sh
awk '
    function printValues() {
        if (Values) {
            print  S, Date,   Value["NSMSSMRLTOT"],
                            Value["NSMSSRSUCC"],
                            Value["NSMSCMTOT"],
                            Value["NSMSCMRSUCC"];
        }
        delete Value;
    }
    $7=="(OK)" {
        printValues()
        Date = $2 " " $3 " " $4;
        S = $NF;
        next;
    }
    $1+0 {
        Value[$3] = $2;
        Values++;
        next ;
    }
    END {
        printValues()
    }
' SHMSGSERV_FRMT
$ ./eshaqur.sh
BC0 Apr 29, 08:10 75718 69284 71264 70947
BC0 Apr 29, 09:10 132640 117741 121283 120752
BC0 Apr 29, 10:10 136221 120417 124147 123444
BC0 Apr 29, 11:10 148035 131664 135324 134636

jpgir@LAPTOP-KJOA2D44 ~
$
2 Likes

Thanks a lot jgir

This one very quick/fast one liner.

After this awk i used seperate awk to process it further in order to insert new column which has values equal to ($6/$5)*100 or so on. Is it possible to include this as well in your one liner.


  1. 1-9 ↩︎

  2. 1-9 ↩︎

  3. 1-9 ↩︎

Dear RudC,

Got it, After changing /-/ hit to /=/ issue resolved. :slight_smile:
Thanks for really great support

Shanul