每月第一天的星期一数
Number of Mondays Falls on the First of the month
我想要一个命令行可以显示给定年份每月第一天的星期一的数量,而无需使用sed
或 awk
命令
我有这个命令显示当月的第一个日期
date -d "-0 month -$(($(date +%d)-1)) days"
使用 GNU date
,您可以从文件(或标准输入)读取输入:
printf '%s\n' 2021-{01..12}-01 | date -f- +%u | grep -c 1
这会打印一年中每个月第一天的日期,然后将它们格式化为“工作日”(其中 1
是“星期一”),然后计算星期一的数量。
要参数化年份,请将 2021
替换为包含年份的变量;包装在函数中:
mondays() {
local year=
printf '%s\n' "$year"-{01..12}-01 | date -f- +%u | grep -c 1
}
使用 for 循环,可以按如下方式完成。
for mon in {01..12}; do date -d "2021-$mon-01" +%u; done | grep -c 1
细分
- 我们遍历代表月份的数字
01
到 12
。
- 我们调用
date
传入自定义日期值,其中包含一年中每个月的第一个日期。我们使用 +%u
到 return 星期几,其中 1
代表星期一。
- 最后我们使用
grep -c
或 grep --count
计算 1
的数量
请注意,所需年份已硬编码为 2021
。当前年份可以用作:
for mon in {01..12}; do date -d "$(date +%Y)-$mon-01" +%u; done | grep -c 1
这也可以全部放入一个函数中,并将所需的年份作为参数传入:
getMondays() {
for mon in {01..12}; do date -d "-$mon-01" +%u; done | grep -c 1
}
我将其实现为:
for ((i=1,year=2021,mondays=0; i< 12; i++)) {
if [ $(date -d "$i/1/$year" +%u) -eq 1 ]
then
let "mondays++"
fi
}
echo "There are $mondays Mondays in $year."
也就是说,我喜欢 Mushfiq 的回答。挺优雅的。
我想要一个命令行可以显示给定年份每月第一天的星期一的数量,而无需使用sed
或 awk
命令
我有这个命令显示当月的第一个日期
date -d "-0 month -$(($(date +%d)-1)) days"
使用 GNU date
,您可以从文件(或标准输入)读取输入:
printf '%s\n' 2021-{01..12}-01 | date -f- +%u | grep -c 1
这会打印一年中每个月第一天的日期,然后将它们格式化为“工作日”(其中 1
是“星期一”),然后计算星期一的数量。
要参数化年份,请将 2021
替换为包含年份的变量;包装在函数中:
mondays() {
local year=
printf '%s\n' "$year"-{01..12}-01 | date -f- +%u | grep -c 1
}
使用 for 循环,可以按如下方式完成。
for mon in {01..12}; do date -d "2021-$mon-01" +%u; done | grep -c 1
细分
- 我们遍历代表月份的数字
01
到12
。 - 我们调用
date
传入自定义日期值,其中包含一年中每个月的第一个日期。我们使用+%u
到 return 星期几,其中1
代表星期一。 - 最后我们使用
grep -c
或grep --count
计算
1
的数量
请注意,所需年份已硬编码为 2021
。当前年份可以用作:
for mon in {01..12}; do date -d "$(date +%Y)-$mon-01" +%u; done | grep -c 1
这也可以全部放入一个函数中,并将所需的年份作为参数传入:
getMondays() {
for mon in {01..12}; do date -d "-$mon-01" +%u; done | grep -c 1
}
我将其实现为:
for ((i=1,year=2021,mondays=0; i< 12; i++)) {
if [ $(date -d "$i/1/$year" +%u) -eq 1 ]
then
let "mondays++"
fi
}
echo "There are $mondays Mondays in $year."
也就是说,我喜欢 Mushfiq 的回答。挺优雅的。