将Shell脚本的输出组织到文本文件内的表中

时间:2019-05-18 05:23:21

标签: shell unix text-files

我正在使用unix shell脚本,该脚本的输出类似于以下代码:

    EVENT DATE: 2019-05-12


TrapLogId Severity EventTime Model Description

     1604 [major]  05:59:50     14 Network Interface Down: service 1-16
     1605 [major]  05:59:51     14 Network Interface Down: service 1-15



EVENT DATE: 2019-05-13


TrapLogId Severity  EventTime Model Description

     1619 [minor]   07:58:50     30 Delayed Subscriber Mapping
     1620 [minor]   08:03:49     79 Failed Reload: File syntax
     1621 [clear]   08:04:49     79 Failed Reload Cleared: File syntax
     1622 [clear]   08:28:50     30 Delayed Subscriber Mapping Cleared


EVENT DATE: 2019-05-15


TrapLogId Severity EventTime Model Description

     1627 [minor]  01:43:58     22 Misconfigured Network Awareness: 10.1.17.0/24
     1628 [clear]  01:48:58     22 Misconfigured Network Awareness Cleared

我正在尝试将其组织成这种格式的表:

EVENT DATE    TrapLogId     Severity     EventTime   Model  Description

2019-05-12    1604          [major]      05:59:50    14     Network Interface Down: service 1-16
2019-05-12    1605          [major]      05:59:51    14     Network Interface Down: service 1-15
2019-05-13    1619          [minor]      07:58:50    30     Delayed Subscriber Mapping
2019-05-13    1620          [minor]      08:03:49    79     Failed Reload: File syntax
2019-05-13    1621          [clear]      08:04:49    79     Failed Reload Cleared: File syntax
2019-05-13    1622          [clear]      08:28:50    30     Delayed Subscriber Mapping Cleared
2019-05-15    1627          [minor]      01:43:58    22     Misconfigured Network Awareness: 10.1.17.0/24
2019-05-15    1628          [clear]      01:48:58    22     Misconfigured Network Awareness Cleared

如何解析呢?如何使用shell将其导出到表中?

我要整理成表格的代码有:

event date 1
header
content 1

event date 2
header
content 2

我想要它

event date (as part of the header) header
content 1
content 2
content 3

2 个答案:

答案 0 :(得分:1)

您可以将脚本传递到:

awk 'BEGIN {
        print "EVENT DATE    TrapLogId     Severity     EventTime   Model  Description"
        print
    }
    /EVENT DATE/ {date=$3}
    match($3, "[0-9][0-9]:[0-9][0-9]:[0-9][0-9]") {
        printf( "%-14s%-14s%-13s%-12s%-3s", date, $1, $2, $3, $4)
        for(i=1;i<=4;i++) $i=""
        print
    }
    '

答案 1 :(得分:0)

$ cat tst.awk
BEGIN { OFS="\t"; dateTag="EVENT DATE" }

{ gsub(/^[[:space:]]+|[[:space:]]+$/,"") }

/^[^0-9]/ {
    if ( $0 ~ dateTag ) {
        date = $NF
    }
    else if ( !doneHdr++ ) {
        numCols = NF
        gsub(/[[:space:]]+/,OFS)

        print dateTag, $0
    }
}

/^[0-9]/ {
    rest = desc = $0
    sub("([[:space:]]+[^[:space:]]+){"(NF-numCols)+1"}$","",rest)
    sub("^([^[:space:]]+[[:space:]]+){"numCols-1"}","",desc)
    gsub(/[[:space:]]+/,OFS,rest)

    print date, rest, desc
}

$ awk -f tst.awk file | column -s$'\t' -t
EVENT DATE  TrapLogId  Severity  EventTime  Model  Description
2019-05-12  1604       [major]   05:59:50   14     Network Interface Down: service 1-16
2019-05-12  1605       [major]   05:59:51   14     Network Interface Down: service 1-15
2019-05-13  1619       [minor]   07:58:50   30     Delayed Subscriber Mapping
2019-05-13  1620       [minor]   08:03:49   79     Failed Reload: File syntax
2019-05-13  1621       [clear]   08:04:49   79     Failed Reload Cleared: File syntax
2019-05-13  1622       [clear]   08:28:50   30     Delayed Subscriber Mapping Cleared
2019-05-15  1627       [minor]   01:43:58   22     Misconfigured Network Awareness: 10.1.17.0/24
2019-05-15  1628       [clear]   01:48:58   22     Misconfigured Network Awareness Cleared