簡體   English   中英

Bash:如何從文本文件中提取類似表格的結構

[英]Bash: How to extract table-like structures from text file

我有一個日志文件,其中包含一些數據和類似於表的重要部分,如下所示:

    //Some data

    --------------------------------------------------------------------------------
    -----                 Output Table                             -----
    --------------------------------------------------------------------------------
            NAME                         Attr1    Attr2      Attr3    Attr4    Attr5
    --------------------------------------------------------------------------------
    fooooooooo                               0        0          3        0        0
    boooooooooooooooooooooo                  0        0         30        0        0
    abv                                      0        0         16        0        0
    bhbhbhbh                                 0        0          3        0        0
    foooo                                    0        0        198        0        0

    WARNING: Some message...


    WARNING: Some message...

    aaaaaaaaa                                0        0         60        0        7
    bbbbbbbb                                 0        0         48        0        7
    ccccccc                                  0        0         45        0        7
    rrrrrrr                                  0        0         50        0        7
    abcabca                                  0        0         42        0        6

// Some data...

    --------------------------------------------------------------------------------
    -----                 Another Output Table                                 -----
    --------------------------------------------------------------------------------
         NAME                            Attr1    Attr2      Attr3    Attr4    Attr5
    --------------------------------------------------------------------------------
    $$foo12                                  0        0          3        0        0
    $$foo12_720_720_14_2                     0        0         30        0        0

我想從給定文件中提取所有類型的表,並保存在單獨的文件中。

筆記:

  • 該表的開頭表示一行,其中包含{NAME,Attr1,...,Attr5}個單詞
  • 警告消息可能存在於表范圍內,應忽略
  • 當空行出現並且該空行的下一行不是“ WARNING”行時,表結束。

所以我期望以下2個文件作為輸出:

        NAME                         Attr1    Attr2      Attr3    Attr4    Attr5
--------------------------------------------------------------------------------
fooooooooo                               0        0          3        0        0
boooooooooooooooooooooo                  0        0         30        0        0
abv                                      0        0         16        0        0
bhbhbhbh                                 0        0          3        0        0
foooo                                    0        0        198        0        0
aaaaaaaaa                                0        0         60        0        7
bbbbbbbb                                 0        0         48        0        7
ccccccc                                  0        0         45        0        7
rrrrrrr                                  0        0         50        0        7
abcabca                                  0        0         42        0        6

     NAME                            Attr1    Attr2      Attr3    Attr4    Attr5
--------------------------------------------------------------------------------
$$foo12                                  0        0          3        0        0
$$foo12_720_720_14_2                     0        0         30        0        0

我會按照您的指示編寫以下awk腳本。

#! /usr/bin/awk -f

# start a table with a NAME line
/^ +NAME/ {
    titles = $0
    print
    next
}

# don't print if not in table
! titles {
    next
}

# blank line may mean end-of-table
/^$/ {
    EOT = 1
    next
}

# warning is not EOT
/^WARNING/ {
    EOT = 0
    next
}

# end of table means we're not in a table anymore, Toto
EOT {
    titles = 0
    EOT = 0
    next
}

# print what's in the table
{ print }

嘗試這個 -

awk -F'[[:space:]]+' 'NF>6 || ($0 ~ /-/ && $0 !~ "Output") {print $0}' f
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
            NAME                         Attr1    Attr2      Attr3    Attr4    Attr5
    --------------------------------------------------------------------------------
    fooooooooo                               0        0          3        0        0
    boooooooooooooooooooooo                  0        0         30        0        0
    abv                                      0        0         16        0        0
    bhbhbhbh                                 0        0          3        0        0
    foooo                                    0        0        198        0        0
    aaaaaaaaa                                0        0         60        0        7
    bbbbbbbb                                 0        0         48        0        7
    ccccccc                                  0        0         45        0        7
    rrrrrrr                                  0        0         50        0        7
    abcabca                                  0        0         42        0        6
    --------------------------------------------------------------------------------
    --------------------------------------------------------------------------------
         NAME                            Attr1    Attr2      Attr3    Attr4    Attr5
    --------------------------------------------------------------------------------
    $$foo12                                  0        0          3        0        0
    $$foo12_720_720_14_2                     0        0         30        0        0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM