1 年の何分の一かを調べる

久しぶりにプログラミングをしようと思い、VBAやらpower shellやらを勉強してみましたが、どうもしっくり来なくて、結局awkに戻ってきました。
リハビリ代わりにawkの達人@hi_saitoさんのサイト1 年の何分の一かを調べるのソースを写してみて実行してみました。

んで、私のPCはWindows7linuxじゃないけど、大丈夫だろうと思って実行したら・・・・
gawk: .div_year.awk:21:致命的エラー:内部エラー」って出てしまう。

色々試したら、yearとnext_yearを文字列に変換したらうまく動いた。
gawkのバージョンは3.1.5だから4.0の機能はコメントにして、ソートはシェルのsortコマンドにお任せした。
以下ソースコード

#! /usr/local/bin/gawk -f
# div_year.awk

BEGIN{
	num_div = ARGV[1] ? ARGV[1] : 10;

	year      = strftime("%Y");
	next_year = year + 1;
	year = year " ";
	next_year = next_year " ";
	start_epoch = mktime(year      "01 01 00 00 00");
	end_epoch   = mktime(next_year "01 01 00 00 00");

	span = end_epoch - start_epoch;

	for(i = 2;i <= num_div;i++){
		for(j = 1; j <= i - 1;j++){
			elapse = int(span / i * j);
			date   = strftime("%Y-%m-%d",start_epoch + elapse);
			div_of[date] = div_of[date] " " j "/" i;
		}
	}

#	PROCINFO["sorted_in"] = "@ind_str_asc"; gawk4.0の機能なのでコメント

	for(i in div_of){
		print i " " div_of[i];
	}
}

実行してみると

gawk -f .\div_year.awk | sort

2013-02-06  1/10
2013-02-10  1/9
2013-02-15  1/8
2013-02-22  1/7
2013-03-02  1/6
2013-03-15  1/5 2/10
2013-03-23  2/9
2013-04-02  1/4 2/8
2013-04-15  2/7
2013-04-20  3/10
2013-05-02  1/3 2/6 3/9
2013-05-17  3/8
2013-05-27  2/5 4/10
2013-06-06  3/7
2013-06-12  4/9
2013-07-02  1/2 2/4 3/6 4/8 5/10
2013-07-22  5/9
2013-07-28  4/7
2013-08-08  3/5 6/10
2013-08-17  5/8
2013-09-01  2/3 4/6 6/9
2013-09-13  7/10
2013-09-18  5/7
2013-10-01  3/4 6/8
2013-10-11  7/9
2013-10-20  4/5 8/10
2013-11-01  5/6
2013-11-09  6/7
2013-11-16  7/8
2013-11-21  8/9
2013-11-25  9/10

うまく動いた。
awkでソートするのは、また後で考えよう