LoginSignup
16
16

More than 5 years have passed since last update.

AWKでグラフ的な表示

Last updated at Posted at 2013-08-09

ごく個人的なスニペットです。昔のブログからサルベージ。

たまにターミナル上でばーっとログを比較したい時があって、使います。

ワンライナー版
awk 'match($0, /^[^ ]+ /) { lst[substr($0 ,RSTART,RLENGTH)] += 1} END { for(a in lst){ l =""; for(i=0;i<lst[a]/1000;i++){ l = l"*"; }  printf("%10d  %-30s %s\n" , lst[a],a,l);} }' | sort  -n
改行とコメントを入れたもの
awk '
/* 正規表現にマッチしたワードをカウントする */
match($0, /^[^ ]+ /) { 
    lst[substr($0 ,RSTART,RLENGTH)] += 1;
}

/* カウントしたワードとカウントを * の数で表す */
END { 
    for(a in lst){ 
        l =""; 
        for(i=0;i<lst[a]/1000;i++) l = l"*"; 
        printf("%10d  %-30s %s\n" , lst[a],a,l);
    } 
}' 

利用イメージ

Apache のログの頭にドメイン名が出ていると仮定すると、

cat /var/log/httpd/access_log \
| awk 'match($0, /^[^ ]+ /) { lst[substr($0 ,RSTART,RLENGTH)] += 1} END { for(a in lst){ l =""; for(i=0;i<lst[a]/1000;i++){ l = l"*"; }  printf("%10d  %-30s %s\n" , lst[a],a,l);} }' \
| sort  -n

結果

      1594  example.com                    **
      1994  foo.example.jp                 **
      2179  moe.example.jp                 ***
      4875  127.0.0.1                      *****
     10648  example.jp                     ***********

まとめ

意外とテキストベース端末でも可視化は有効。

ここであげたようなサブドメインごとの件数集計以外にも1分ごとにどのくらいの接続があったのか、とか正規表現と出力をちょろっと変えることでいつものコンソール上で見やすく整形できるのでけっこう便利です。

たとえば以下のように変更することで、一分ごと(/2013:10:[0-9]+/ にマッチしたパターンごと)の集計が実現できます。

awk 'match($0, /2013:10:[0-9]+/) { lst[substr($0 ,RSTART,RLENGTH)] += 1} END { for(a in lst){ l =""; for(i=0;i<lst[a]/10;i++){ l = l"*"; }  printf("%s\t%5d\t%s\n" , a, lst[a],l);} }' | sort  -n

手持ちの検証サーバでの結果は、こんな感じになります。

2013:10:34     52   ******
2013:10:35     26   ***
2013:10:36     23   ***
2013:10:37     26   ***
2013:10:38     26   ***
2013:10:39     23   ***
2013:10:40     11   **
2013:10:41     31   ****
2013:10:42    275   ****************************
2013:10:43     17   **
2013:10:44     16   **
2013:10:45     15   **
2013:10:46     25   ***
2013:10:47     23   ***
2013:10:48     21   ***
2013:10:49     30   ***
2013:10:50     16   **
2013:10:51     37   ****
2013:10:52     17   **
2013:10:53     23   ***
2013:10:54      9   *
2013:10:55      5   *
2013:10:56      5   *
16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16