pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


ウェブサーバから配信されるコンテンツの拡張子の分布を算出するスクリプト

ウェブサーバから配信するファイルの拡張子のパターンが変わることを検知して、何かの予測に使えないかと思ったので、スクリプトを書いてみるテスト。

実行すると、こうなる。

$ 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"
	}
}