-1

私はスクリプトの初心者で、あなたの助けが必要です。クリーンアップしたログファイルがあります。次のようになります (時間、期間 (ミリ秒単位)、アクション):

2012-04-28 00:00:00;277.406; 
2012-04-28 00:00:00;299.680; 
2012-04-28 00:00:00;282.338; 
2012-02-28 00:00:00;272.241;

期間データを使用してアクションをカウントするスクリプトを作成する必要があります。

4

1 に答える 1

0

まず、さまざまなフィールドを簡単に解析できるようにする必要があります。簡単な方法は、セミコロンをスペースに変更することです

tr ";" " " <logfile|awkscript

次に、低い値と高い値のテーブルを作成する必要があります。インデックスが列の名前である連想配列を使用しています。これは BEGIN セクションで行います。

値が低い値と高い値の範囲内にある場合にカウントする必要があります。これを中間セクションで行います。

END セクションでは、値を出力します。2 つの同様の printf フォーマット文字列を使用して、ヘッダーと値が適切に並んでいることを確認します。

#!/usr/bin/awk -f
BEGIN {
    low["<1ms"]=0;high["<1ms"]=1
    low["1-10ms"]=1;high["1-10ms"]=10
    low["10-100ms"]=10;high["10-100ms"]=100
    low["100-500ms"]=100;high["100-500ms"]=500
    low[">500ms"]=500;high[">500ms"]=1000000000
}
{
# Middle section - for each line
duration=$3

for (i in high) {
    if ((duration > low[i]) && (duration <= high[i]) ) {
#       printf("duration: %d, low: %s,high: %s\n", duration, low[i], high[i]);
        total+=duration # total duration
        bin[i]++ # store a count into different bins
        count++ # total number of measurements
    }
}
}
END {
average=total/count
FMT="%-10s %10s %10s %10s %10s %10s\n"
NFMT="%-10.3f %10s %10s %10s %10s %10s\n"
printf(FMT,"AVG", "<1ms", "1-10ms", "10-100ms", "100-500ms", "500+ms")
printf(NFMT,average, bin["<1ms"], bin["1-10ms"], bin["10-100ms"], bin["100-500m\
s"], bin["500+ms"])

}

あなたのデータでこれを実行すると、

AVG              <1ms     1-10ms   10-100ms  100-500ms     500+ms

282.916                                              4
于 2013-05-14T14:55:17.430 に答える