ウェブサーバから配信されるコンテンツの拡張子の分布を算出するスクリプト
ウェブサーバから配信するファイルの拡張子のパターンが変わることを検知して、何かの予測に使えないかと思ったので、スクリプトを書いてみるテスト。
実行すると、こうなる。
$ cat access.log | head -1000 | ./count_ext_size.awk #share count ext sizetotal 32.9% 329 js 5491681 26.8% 268 html 1814632 20.1% 201 css 433080 3.8% 38 gif 215811 0.4% 4 png 5964 0.3% 3 php 1584 0.2% 2 pdf 116571 0.1% 1 txt 988
#!/usr/bin/awk -f # # count_ext_size.awk { # apache commons を想定して書いてます。 # ログフォーマットが違う場合はここらへんで前処理します。 url=$7 size=$10 } { # ファイル名とURL のいずれの文字列でも検知できるようにしています。 match( url, /^((https?):?\/\/[a-zA-Z0-9\.\-]+?)?(\/[a-zA-Z0-9\/\$\-_\.\+\!\*\'\(\)\,%]+?)(\.([a-zA-Z0-9\/\$\-_\.\+\!\*\'\(\)\,%]+?))([\?#;].+)?$/, urlmatch ) # 拡張子が不明な場合は "html" と仮定します。 if ( urlmatch[5] == "" ) { urlmatch[5] = "html" } count_ext[urlmatch[5]]++; size_ext[urlmatch[5]]+=size next } END { print "#share\tcount\text\tsizetotal" for ( i in count_ext ) { printf "%3.1f%%\t%d\t%s\t%d\n", 100*count_ext[i]/NR, count_ext[i], i, size_ext[i] | "sort -nr" } }