Search code examples
linuxshellubuntuunixgnu

Number of Mondays Falls on the First of the month


I want a command line can display number of Monday(s) which fall(s) on the first of the month in a given year without using sed or awk commands

I have this command that display the first date of the current month

date -d "-0 month -$(($(date +%d)-1)) days"


Solution

  • With GNU date, you can read input from a file (or standard input):

    printf '%s\n' 2021-{01..12}-01 | date -f- +%u | grep -c 1
    

    This prints dates for the first of each month in a year, then formats them as "weekday" (where 1 is "Monday"), then counts the number of Mondays.

    To parametrize the year, replace 2021 with a variable containing the year; wrapped in a function:

    mondays() {
        local year=$1
        printf '%s\n' "$year"-{01..12}-01 | date -f- +%u | grep -c 1
    }