这是一个任务。我有以下代码:
#! /bin/bash
y=$1
if [ -z $1 ] # if year is not specified use the current year
then y=(`date +%Y`)
fi
for m in {1..12}; do
if [ $m -eq 12 ] # december exception
then echo $(date -d $m/1/$y +%b) - $(date -d "$(($m%12+1))/1/$y" +%A)
break
fi
echo $(date -d $m/1/$y +%b) - $(date -d "$(($m%12+1))/1/$y - 1 days" +%A) # print the last day of the week for the month
done
Run Code Online (Sandbox Code Playgroud)
它列出了每个月一周的最后一天:
Jan - Monday
Feb - Monday
Mar - Thursday
Apr - Saturday
May - Tuesday
Jun - Thursday
Jul - Sunday
Aug - Wednesday
Sep - Friday
Oct - Monday
Nov - Wednesday
Dec - Saturday
Run Code Online (Sandbox Code Playgroud)
现在我需要反转它,以便它列出以一周中的每一天结束的月份,如下所示:
Sunday - Jul
Monday - Jan Feb Oct
Tuesday - May
Wednesday - Aug Nov
Thursday - Mar Jun
Friday - Sep
Saturday - Apr Dec
Run Code Online (Sandbox Code Playgroud)
我正在考虑嵌套循环
for d in {1..7};
Run Code Online (Sandbox Code Playgroud)
并将月份存储在数组中?
小智 5
#! /usr/bin/env bash
# if year is not specified use the current year
declare -r year="${1:-$(date +%Y)}"
# associative array (aka hash table)
declare -A months_per_day=()
for m in {01..12}; do
day_month=$(LANG=C date -d "${year}-${m}-01 +1 month -1 day" +"%A %b")
months_per_day[${day_month% *}]+=" ${day_month#* }"
done
for day in Sunday Monday Tuesday Wednesday Thursday Friday Saturday; do
echo "${day} -${months_per_day[${day}]:-}"
done
Run Code Online (Sandbox Code Playgroud)
输出:
Sunday - Jul
Monday - Jan Feb Oct
Tuesday - May
Wednesday - Aug Nov
Thursday - Mar Jun
Friday - Sep
Saturday - Apr Dec
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |