cal
スクリプトまたはHTMLを使用してExcelで使用できるように、以下の日付と曜日を1行で出力する作業コマンドを試しています。以下の通りです。
Wed Thu Fri Sat Sun Mon Tue Wed
1 2 3 4 5 6 7 8
ベストアンサー1
bash
(またはksh93
)とGNUを使用してくださいdate
。
for (( i = 0; i < 8; ++i )); do
printf '%s\t' "$( date -d "now +$i days" +"%a" )"
done
echo
for (( i = 0; i < 8; ++i )); do
printf ' %d\t' "$( date -d "now +$i days" +"%e" )"
done
echo
この%a
形式は現在のロケールの曜日の省略形を提供し、%e
その月の日付を整数として提供します。
結果(タブ区切り):
Tue Wed Thu Fri Sat Sun Mon Tue
7 8 9 10 11 12 13 14
ksh93
コメント後の更新:(注:シェルが日付を正しく確認できないようです。この方法は機能しません。)
#!/bin/ksh93
yearmonth=$( date +"%Y%m" )
d=1
while printf '%(%a)T\t' "$( printf '%s%02d' "$yearmonth" "$d" )" 2>/dev/null
do
(( ++d ))
done
echo
days_this_month=$(( --d ))
while (( d > 0 )); do
printf ' %d\t' "$(( days_this_month - (--d) ))"
done
echo
yearmonth
まず、フォーマットを現在の年と月に設定しますYYYYMM
。その後、その月のすべての平日を繰り返します。ループはwday
短縮された平日に設定され、無効な日付の平日を取得しようとすると終了します。
2番目のループは、埋める必要がある月数だけ整数だけを印刷します。
2017年2月の出力:
Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue Wed Thu Fri Sat Sun Mon Tue
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
ksh93
PerlとDate :: Calcを使用したソリューション:
#!/bin/ksh93
ym=( $(date +"%Y %m") )
days=$( perl -MDate::Calc -e 'print Date::Calc::Days_in_Month($ARGV[0],$ARGV[1])' -- "${ym[0]}" "${ym[1]}" )
for d in {1..$days}; do
printf '%(%a)T\t' "$( printf '%d-%d-%02d' "${ym[@]}" "$d" )"
done
echo
for d in {1..$days}; do
printf '%d\t' "$d"
done
echo