#!/usr/local/bin/perl -w use Time::Local; ($month, $year, $wday) = (localtime)[4..6]; printf "%11d/%02d\n Su Mo Tu We Th Fr Sa\n", $year + 1900, $month; $month_data = ' ' x ((localtime timelocal(0,0,0,1,$month,$year,$wday))[6] * 3); for (1 .. (31, ($year % 100 == 0 && $year % 400 != 0 || $year % 4 != 0) ? 28 : 29, 31, 30, 31, 30, 31, 31, 30 ,31, 30, 31)[$month]) { $month_data .= sprintf(' %2d', $_); } print map "$_\n", unpack 'A21' x 5, $month_data; __END__ #!/usr/local/bin/gawk -f BEGIN { year = strftime("%Y"); month = strftime("%m"); printf "%11d/%02d\n Su Mo Tu We Th Fr Sa\n", year, month; m["02"] = (year % 100 == 0 && year % 400 != 0 || year % 4 != 0) ? 28 : 29; m["04"]=m["06"]=m["09"]=m["11"] = 30; m["01"]=m["03"]=m["05"]=m["07"]=m["08"]=m["10"]=m["12"] = 31; data = substr(" ", 1, strftime("%w", systime() - 86400 * (strftime("%d") - 1)) * 3); for (i = 1; i <= m[month]; i++) data = sprintf("%s %2d", data, i); for (i = 0; i <= 5; i++) print substr(data, 1 + i * 21, 21); }