0

以下は、アプリケーションログからすべてのエラー/例外を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はボックスにのみインストールされていることに注意してください。

4

1 に答える 1

0

これがを使用する1つの方法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
    }
}

ご覧のとおり、このスクリプトは4つのコマンド、、、、をtail実行vmstatfreeますps。これで、var[1-3]を使用して何かを行う責任があります。さらにサポートが必要な場合はお知らせください。幸運を。

于 2012-12-10T12:57:00.093 に答える