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