曜日の取得

comp.lang.awk からですが、How to get weekday for date value というのがありました。要するに、日付を与えた時に曜日を取得するというものです。例えば、'12/06/08' と入力された時に 'FRI' と返します。

いくつか回答が挙がっているので列挙しておきます。

解答例 1

$ echo "13/06/08" | awk '{split($0,a,"/");print \
toupper(strftime("%a", mktime("20"a[3]" "a[2]" "a[1]" 12 0 0")))}'
FRI

解答例 2

上のものとほとんど同じでは?

$ echo "12/06/08" | awk '{split($0,a,"/");print \
toupper(strftime("%a", mktime("20"a[3]" "a[2]" "a[1]" 24 0 0")))}'
FRI

解答例 3

これは全てが大文字ではない場合です。

$ date -d $(echo "12/06/08" | awk 'NR==1{$1=1+$1} 1' RS=/ | tac |\
awk '1' ORS=) +%a
Fri

解答例 4

$ date -d $(echo "12/06/08" | awk 'NR==1{$1=1+$1} 1' RS=/ | tac |\
awk '1' ORS=) +%^a
FRI

解答例 5

上のものは gawk や date コマンドに頼るものですが、nawk などでは以下のようにして求まります。

function weekday( year, month, day,      x1, x2, x3, x4 ) {
    x1 = int( (14 - month) / 12 )
    x2 = year - x1
    x3 = month + 12 * x1 - 2
    x4 = x2 + int(x2/4) - int(x2/100) + int(x2/400) + int( (31*x3) / 12)
    return (x4 + day) % 7
}