我希望命令行可以显示指定年份第一个月的星期一数,而无需使用 sed
或 {{1} } 命令
我有这个命令显示当月的第一个日期
awk
答案 0 :(得分:2)
使用 GNU date
,您可以从文件(或标准输入)读取输入:
printf '%s\n' 2021-{01..12}-01 | date -f- +%u | grep -c 1
这会打印一年中每个月的第一天的日期,然后将它们格式化为“工作日”(其中 1
是“星期一”),然后计算星期一的数量。
要参数化年份,请将 2021
替换为包含年份的变量;包裹在一个函数中:
mondays() {
local year=$1
printf '%s\n' "$year"-{01..12}-01 | date -f- +%u | grep -c 1
}
答案 1 :(得分:1)
使用 for 循环,可以按如下方式完成。
for mon in {01..12}; do date -d "2021-$mon-01" +%u; done | grep -c 1
细分
01
到 12
。date
传入自定义日期值以及一年中每个月的第一个日期。我们使用 +%u
返回星期几,其中 1
代表星期一。1
或 grep -c
计算 grep --count
的数量请注意,所需年份已硬编码为 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 "$1-$mon-01" +%u; done | grep -c 1
}
答案 2 :(得分:0)
我将其实现为:
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 的回答。很优雅。