月の最終 X 曜日の日付2011年10月12日 18時09分45秒

月の最終 X 曜日の日付を求める。例えば、2011 年 11 月の最後の金曜日は 28 日だ。このぐらいだったら、cal の手助けを得れば、大したことは無い。

% cal
    October 2011      
Su Mo Tu We Th Fr Sa  
                   1  
 2  3  4  5  6  7  8  
 9 10 11 12 13 14 15  
16 17 18 19 20 21 22  
23 24 25 26 27 28 29  
30 31

cal の出力は曜日によって固定されている。そこで、最終月曜日を得るには最後の列の二行目を取得すればいい。monday の値を順次更新していく。

% cal | awk '{monday=$2}END{print monday}'
31

ところがこれでは、最後の列に日付が無いと狂ってしまう。そこで、行数を点検する。


% cal | awk 'NF>=6{friday=$6}END{print friday}'
28