Visit The New, Modern Unix Linux Community


How to find second and fourth Monday of the month?


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers How to find second and fourth Monday of the month?
# 15  
That's because the algorithm assigns day 7 to the second week already, which is the case for the second Monday of September and December, 2015. On top, the empty lines are due to invalid dates for months that dont have a 31., or 29., 30., 31. for February. And, DATE and dayofmonth hold identical values. Try the modified script:
Code:
YEAR=2015
for MONTH in $(seq -w 1 12) 
  do for DATE in $(seq -w 1 31)
    do dayofweek=$(date -d"${YEAR}${MONTH}${DATE}" +%w)
       [ $? == 0 ] || continue
       weekofmonth=$(( 1 + (10#$DATE - 1) / 7 ))
       if [ $dayofweek -ne 1 -o \( $weekofmonth -ne 2 -a $weekofmonth -ne 4 \) ]
         then continue
         else MONDAY_DATE=`date -d"${YEAR}${MONTH}${DATE}" +%d.%m.%Y`
              echo "$MONDAY_DATE"
       fi
    done
  done

# 16  
Quote:
Originally Posted by RudiC
That's because the algorithm assigns day 7 to the second week already, which is the case for the second Monday of September and December, 2015. On top, the empty lines are due to invalid dates for months that dont have a 31., or 29., 30., 31. for February. And, DATE and dayofmonth hold identical values. Try the modified script:
Code:
YEAR=2015
for MONTH in $(seq -w 1 12) 
  do for DATE in $(seq -w 1 31)
    do dayofweek=$(date -d"${YEAR}${MONTH}${DATE}" +%w)
       [ $? == 0 ] || continue
       weekofmonth=$(( 1 + (10#$DATE - 1) / 7 ))
       if [ $dayofweek -ne 1 -o \( $weekofmonth -ne 2 -a $weekofmonth -ne 4 \) ]
         then continue
         else MONDAY_DATE=`date -d"${YEAR}${MONTH}${DATE}" +%d.%m.%Y`
              echo "$MONDAY_DATE"
       fi
    done
  done

Thanks RudiC.
Can you please advise how are you coming up with the value 10 in below code? Basically, I want to understand the thought process while selecting the value, so the logic will be clear and will help in long run.
Code:
weekofmonth=$(( 1 + (10#$DATE - 1) / 7 ))

# 17  
man bash:
Quote:
Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the form [base#]n, where the optional base is a decimal number between 2 and 64 representing the arithmetic base, and n is a number in that base.
August and September will make the calculation fail unless the base is specified. I can't tell how far this applies to other shells...
This User Gave Thanks to RudiC For This Post:
# 18  
Ah, yes. I hadn't thought of Monday 7th being the first week.

Try:-
Code:
((weekofmonth=1+($dayofmonth-1)/7))

Sorry about that,
Robin Smilie
This User Gave Thanks to rbatte1 For This Post:
# 19  
Quote:
Originally Posted by RudiC
man bash: August and September will make the calculation fail unless the base is specified. I can't tell how far this applies to other shells...
Thanks. Script works well.

When searched more, I found out that instead of using %d option of date, if we use %e it works well.

Please find below modified script:
Code:
#!/bin/bash

YEAR=2015
for MONTH in $(seq -w 1 12)
do
        for DATE in $(seq -w 1 31)
        do
                dayofmonth=$(date -d"${YEAR}${MONTH}${DATE}" +%e 2>/dev/null)
		[ $? == 0 ] || continue
                dayofweek=$(date -d"${YEAR}${MONTH}${DATE}" +%w)
                weekofmonth=$((($dayofmonth-1)/7+1))

                if [ $dayofweek -ne 1 -o \( $weekofmonth -ne 2 -a $weekofmonth -ne 4 \) ]
                then
                        #printf "Not running today.\n"
                        continue
                else
                        MONDAY_DATE=`date -d"${YEAR}${MONTH}${DATE}" +%d.%m.%Y`
                        echo "$MONDAY_DATE"
                fi
        done
done

Output:
Code:
$ sh Monday_Date.sh
12.01.2015
26.01.2015
09.02.2015
23.02.2015
09.03.2015
23.03.2015
13.04.2015
27.04.2015
11.05.2015
25.05.2015
08.06.2015
22.06.2015
13.07.2015
27.07.2015
10.08.2015
24.08.2015
14.09.2015
28.09.2015
12.10.2015
26.10.2015
09.11.2015
23.11.2015
14.12.2015
28.12.2015
$

---------- Post updated at 04:24 PM ---------- Previous update was at 04:21 PM ----------

Quote:
Originally Posted by rbatte1
Ah, yes. I hadn't thought of Monday 7th being the first week.

Try:-
Code:
((weekofmonth=1+($dayofmonth-1)/7))

Sorry about that,
Robin Smilie
Thanks Robin/RudiC and others for all your help.

Last edited by Prathmesh; 07-01-2015 at 07:52 AM.. Reason: editing content
 

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #301
Difficulty: Easy
Slackware was originally derived from the Software Linux System (SLS).
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find one month before date

Hi, I want two dates one will be the current date and the other one will be just one month before. Say if current month is 11/4/2014 then the other date should be 11/3/2014. #!/bin/ksh currentDtae=`date` oneMonthBefore= ? I dont know how to do it. Went through some of the related threads... (15 Replies)
Discussion started by: Sharma331
15 Replies

2. UNIX for Advanced & Expert Users

How to find last two files for a month?

Hi All, I need to find last two files for the month. lets say there are following files in directory -rwxr-xr-x 1 user userg 1596 Mar 19 15:43 c.txt -rwxr-xr-x 1 user userg 1596 Mar 21 15:43 d.txt -rwxr-xr-x 1 user userg 1596 Mar 22 15:43 f.txt -rwxr-xr-x 1... (14 Replies)
Discussion started by: Makarand Dodmis
14 Replies

3. HP-UX

How to find a file created in UNIX every monday.???

Hi All Any one please suggest me... I have one directory every monday one file will be created in that directory. so if the file is created on monday or not i need check first. How can write a script??? if the file is not created i want to quit from script. Thanks K.Srinivas (5 Replies)
Discussion started by: k_s_rao7
5 Replies

4. UNIX for Advanced & Expert Users

Crontab For First Monday Of Every Month!!

Hi, Could any one please let me know the crontab entry for scheduling a job for every first monday of the month? Thank You in advance, Sue (2 Replies)
Discussion started by: pyaranoid
2 Replies

5. UNIX for Dummies Questions & Answers

cron script -run every 2nd day of month except Monday

I know I can't schedule this in cron and would have to write a wrapper around my script and schedule it in cron ....but not sure how do to this? How do I exclude Monday if the 2nd day of the month falls on a Monday? Thanks. I tried this: 0 0 2 * 0,2-6 command And I know this doesnt... (2 Replies)
Discussion started by: newtou
2 Replies

6. UNIX for Dummies Questions & Answers

I wanted to get the date of the first monday of a month.

Hi, I need to display the date of the first monday of a month. Can any one please help me on this. Thanks in advance. (6 Replies)
Discussion started by: Sheethal
6 Replies

7. UNIX for Dummies Questions & Answers

find out month from a date

I would like to find out the month from a given date, how is it possible. (5 Replies)
Discussion started by: rudoraj
5 Replies

8. Shell Programming and Scripting

how can i find the third friday of each month?

Help please! I need to read the calendar and put the date of the third Friday of each month into a variable for comparison in an "if" statement. How would I do this? Thnx, leslie02 (10 Replies)
Discussion started by: leslie02
10 Replies

9. Shell Programming and Scripting

Find all files by month

Hi, I am trying to do achieving of files by months. find /test -name \*.* -mtime +30 will give me the result of all modified files after 30 days. But lets say i want to list all files that is modified in last months... what is the command to do it? Thanks! (13 Replies)
Discussion started by: maldini
13 Replies

10. UNIX for Dummies Questions & Answers

Crontab First Monday of Month only

Is there a way to setup a cronjob that will only run on the first monday of the month? (3 Replies)
Discussion started by: molonede
3 Replies

Featured Tech Videos