1 年の何分の一かを調べる
久しぶりにプログラミングをしようと思い、VBAやらpower shellやらを勉強してみましたが、どうもしっくり来なくて、結局awkに戻ってきました。
リハビリ代わりにawkの達人@hi_saitoさんのサイト1 年の何分の一かを調べるのソースを写してみて実行してみました。
んで、私のPCはWindows7でlinuxじゃないけど、大丈夫だろうと思って実行したら・・・・
「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でソートするのは、また後で考えよう