列出本月的所有星期一

时间:2017-06-19 05:42:27

标签: bash unix

我对bash和所有终端都很陌生 - 我一直在搞乱cal和日期脚本,想知道是否还有列出当月星期一的所有日期。 我的思维过程是通过cal命令,列出日期,并可能从该输入中删除一列。这可能吗?

3 个答案:

答案 0 :(得分:4)

假设:

$ cal
     June 2017
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

你可以这样做:

$ cal | awk 'NF>5{print $2}'
Mo
5
12
19
26

如果你想要支持任何天cal的东西,请使用字段宽度(仅限gawk):

$ cal | gawk -v n=5 '
            BEGIN{
               FIELDWIDTHS = "3 3 3 3 3 3 3"
           }
           FNR>1{print $n}'
Th 
 1 
 8 
15 
22 
29

或者,正如评论中所指出的那样:

$ ncal | awk '/^Mo/'
Mo     5 12 19 26

答案 1 :(得分:4)

您可以使用date命令执行此操作。从一个月前开始打印10个星期一:

for x in $(seq 0 9)
do
    date -d "$x monday 5 week ago"
done

grep只在当月。完整命令:for x in $(seq 0 9); do; date -d "$x monday 5 week ago"; done | grep $(date +%b)

输出:

Mon Jun  5 00:00:00 MSK 2017
Mon Jun 12 00:00:00 MSK 2017
Mon Jun 19 00:00:00 MSK 2017
Mon Jun 26 00:00:00 MSK 2017

答案 2 :(得分:0)

组合cal,cut命令以实现输出。

cal -h| cut -c'4,5'

删除突出显示并剪切适合星期一字段的字符。

ncal | sed -n '/^Mo/p'

输出如下:

Mo     5 12 19 26