簡體   English   中英

AWK:解析多個命令的輸出

[英]AWK : parsing output of multiple commands

以下是我用來從應用程序日志中grep所有錯誤/異常的腳本:

$ tail -f -n 0 /web/*/logs/*.log | awk '{ if ( $0 ~ /==>.*<==/) { print "File :" $0 } else if( $0 ~ /error/ || $0 ~ /Error/ || $0 ~ /exception/ || $0 ~ /Excpetion/ || $0 ~ /ORA-/ || $0 ~ /fatal/ || $0 ~ /Fatal/){print "Error " $0}}'

輸出結果很好,但是我的要求是我需要並行解析其他系統命令的輸出:

vmstat
top 
sar 

等等

有沒有一種方法可以通過運行單個awk命令來獲取所有命令的輸出,例如:

awk process output of:

application logs
vmstat
top 
sar

等等

請注意,我們僅在盒子中安裝了awk和gawk。

這是使用GNU awk的一種方法。 運行像:

awk -f script.awk

awk.script內容:

BEGIN {
    printf "Process output of:\n"

    command0="tail -f -n 0 /web/*/logs/*.log"
    command1="vmstat"
    command2="free"
    command3="ps -eo pcpu,pid,user,tty,args"

    printf "\n>%s:\n\n", command0
    while ( (command0 |& getline var0) > 0) {
        if (var0 ~ /==>.*<==/) {
            print "File :" var0
        }
        else if (var0 ~ /[Ee]rror|[Ee]xception|ORA|[Ff]atal/) {
            print "Error", var0
        }
    }

    printf "\n>%s:\n\n", command1
    while ( (command1 |& getline var1) > 0) {
        print var1
    }

    printf "\n>%s:\n\n", command2
    while ( (command2 |& getline var2) > 0) {
        print var2
    }

    printf "\n>%s:\n\n", command3
    while ( (command3 |& getline var3) > 0) {
        print var3
    }
}

如您所見,此腳本將運行四個命令: tailvmstatfreeps 現在,您有責任對var [1-3]進行操作。 如果可以進一步幫助,請告訴我。 祝好運。

暫無
暫無

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

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