Hi ,
Please help me out to write a shell script to obtain the date of first tueday of every month. I am new to shell scripting.
Appreciate your help Thanks.
Hi ,
Please help me out to write a shell script to obtain the date of first tueday of every month. I am new to shell scripting.
Appreciate your help Thanks.
cal -m | awk 'NR>2{Sfields=7-NF; if (Sfields == 1 ) {print $1;exit} if ( Sfields == 0) { print $2;exit}}'
For every month of curren year
for i in `seq 12`; do cal -m $i `date '+%Y'` | awk 'NR>2{Sfields=7-NF; if (Sfields == 1 ) {print $1;exit} if ( Sfields == 0) { print $2;exit}}' ; done
try this
cal 2013 | awk 'BEGIN{b[0]=3;b[1]=2;b[2]=1;b[3]=7;b[4]=6;b[5]=5;b[6]=4}($1 ~ /^S$/){x=1;mon1=p;getline;for(i=2;i<=NF;i++){if($i==1){a[x]=i;x++}};
d1=7-a[1]+1;d2=7-(a[2]-a[1]);d3=7-(NF-a[2]+1);split(mon1,c);
printf "%s_Tue:%d\n%s_Tue:%d\n%s_Tue:%d\n",c[1],b[d1],c[2],b[d2],c[3],b[d3]}{p=$0}'
If you have ksh93
try this
$ cal 2013
2013
January February March
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 1 2 1 2
6 7 8 9 10 11 12 3 4 5 6 7 8 9 3 4 5 6 7 8 9
13 14 15 16 17 18 19 10 11 12 13 14 15 16 10 11 12 13 14 15 16
20 21 22 23 24 25 26 17 18 19 20 21 22 23 17 18 19 20 21 22 23
27 28 29 30 31 24 25 26 27 28 24 25 26 27 28 29 30
31
April May June
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 4 1
7 8 9 10 11 12 13 5 6 7 8 9 10 11 2 3 4 5 6 7 8
14 15 16 17 18 19 20 12 13 14 15 16 17 18 9 10 11 12 13 14 15
21 22 23 24 25 26 27 19 20 21 22 23 24 25 16 17 18 19 20 21 22
28 29 30 26 27 28 29 30 31 23 24 25 26 27 28 29
30
July August September
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 1 2 3 1 2 3 4 5 6 7
7 8 9 10 11 12 13 4 5 6 7 8 9 10 8 9 10 11 12 13 14
14 15 16 17 18 19 20 11 12 13 14 15 16 17 15 16 17 18 19 20 21
21 22 23 24 25 26 27 18 19 20 21 22 23 24 22 23 24 25 26 27 28
28 29 30 31 25 26 27 28 29 30 31 29 30
October November December
Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa
1 2 3 4 5 1 2 1 2 3 4 5 6 7
6 7 8 9 10 11 12 3 4 5 6 7 8 9 8 9 10 11 12 13 14
13 14 15 16 17 18 19 10 11 12 13 14 15 16 15 16 17 18 19 20 21
20 21 22 23 24 25 26 17 18 19 20 21 22 23 22 23 24 25 26 27 28
27 28 29 30 31 24 25 26 27 28 29 30 29 30 31
$ cat First_Tuesday_In_Month.sh
#!/bin/ksh
Year=2013
for i in {0..11}; do
for j in {0..6}; do
date=$(date -d"$((Year-1))1231 $j day $i month" +"%w %F")
if [ ${date:0:1} -eq 2 ]; then
echo ${date:2}
fi
done
done
$ ksh First_Tuesday_In_Month.sh
2013-01-01
2013-02-05
2013-03-05
2013-04-02
2013-05-07
2013-06-04
2013-07-02
2013-08-06
2013-09-03
2013-10-01
2013-11-05
2013-12-03
@ pravin27 you are printing date of every monday...
-m Display Monday as the first day of the week.
$ cal -m
November 2013
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
from man page
on Ubuntu 12.04 LTS 32-Bit
-m month
Display the specified month. If month is specified as a decimal number, it may be followed by the letter �f� or �p� to
indicate the following or preceding month of that number, respectively.
on terminal
$ cal -m
cal: option requires an argument -- 'm'
Usage: cal [general options] [-hjy] [[month] year]
cal [general options] [-hj] [-m month] [year]
ncal [general options] [-bhJjpwySM] [-s country_code] [[month] year]
ncal [general options] [-bhJeoSM] [year]
General options: [-NC3] [-A months] [-B months]
For debug the highlighting: [-H yyyy-mm-dd] [-d yyyy-mm]
Where as following one displays cal of Jan
$ cal -m 1
January 2013
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Could be possible if you are using FreeBSD
or RedHat
With full date format "dd-mm-yyyy"
for i in `seq 12`; do cal $i `date '+%Y'` | awk -v month=$i -v year=`date '+%Y'` 'NR>2{Sfields=7-NF; if (Sfields == 0 ) {printf "%d-%02d-%d\n",$3,month,year;exit} if ( Sfields == 1) {printf "%d-%02d-%d\n",$2,month,year;exit} if ( Sfields == 2) {printf "%d-%02d-%d\n",$1,month,year;exit}}' ; done
#!/bin/ksh93
year=2013
for ((i=1; i<=12; i++ ))
do
printf "%(%F)T\n" "first tues ${year}-${i}"
done