如何获取每个月的第一个星期四的日期?
解题思路大致如下:
一.用cal打印出来,并用awk取值.
如果需要打印多个月或需要固定的格式,可用角本进行输出.
[root@test opt]# cal 1
2010
January
2010 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
以上面2010年1月输出来说,第一个周四为1月7号,但如果用awk简单的第三行第五个字段的话会有问题,因为第三行只有两个字段,如果你输出第五个字段的话,应该是为空值.
[root@test opt]# cal 1 2010 | awk
'NR==3&&NF>=3{print
$(NF-2);exit}NR==4{print $5}'
7
[root@test opt]# for((i=1;i<=12;i++)); do D=`cal
$i 2010|awk
'NR==3&&NF>=3 {print
$(NF-2);exit} NR==4 {print $(NF-2)}'`; echo "2010-$i-$D";
done
二.用date -d来实现.
[root@test opt]# for i in `seq 1 12`;do date -d "$((
(11-$(date -d
2010-$i-1 +%w))%7))day 2010-$i-1" +%Y-%m-%d;done
2010-01-01
2010-02-05
2010-03-05
2010-04-02
2010-05-07
2010-06-04
2010-07-02
2010-08-06
2010-09-03
2010-10-01
2010-11-05
2010-12-03
红色字体的11可以说是个变量,如果说设这个点的变量为i,那么,i的值等于7+星期几.而这里是周四,所以7+4=11