列出本月所有的星期一。

3

我对bash和终端都很陌生 - 我一直在玩cal和日期脚本,想知道是否有方法列出当前月份所有星期一的日期。 我的思路是通过cal命令,列出日期,然后可能从这个输入中切割一个列。这可能吗?

3个回答

5
您可以使用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

仅限GNU日期,不包括POSIX。 - dawg

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

如果您需要支持任何日历日期,可以使用字段宽度来实现(仅适用于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
可能是ncal | awk 'NR==2{$1="";print}'吧?总之,使用cal加一分。 - hek2mgl
我还以为只有我会用“cal -3”保留日历... - David C. Rankin

0

通过结合cal和cut命令实现输出。

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

取消高亮显示并剪切适合星期一字段的字符。

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

输出如下:

Mo     5 12 19 26   

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接