每月第一天的星期一数

时间:2021-02-22 19:38:30

标签: linux shell ubuntu unix gnu

我希望命令行可以显示指定年份第一个月的星期一数,而无需使用 sed 或 {{1} } 命令

我有这个命令显示当月的第一个日期

awk

3 个答案:

答案 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

细分

  • 我们遍历表示月份的数字 0112
  • 我们调用 date 传入自定义日期值以及一年中每个月的第一个日期。我们使用 +%u 返回星期几,其中 1 代表星期一。
  • 最后,我们使用 1grep -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 的回答。很优雅。