刚刚开始在这里与BASH合作,目前我正忙于提取本月每个星期三的日期....任何人都能帮我解释一下吗?干杯!
答案 0 :(得分:1)
尝试以下脚本(受SoFan评论启发):
varY=2016;varM=8;varD=4; cal $varM $varY | sed 's/ / . /g' | awk -v f="$varD" 'NR>2{if ($f ~ "\.") {next;} {print $f}}'
<强>解释强>:
varY=2016;varM=8;varD=4;
:scrit的参数。分别为年,月和日。日期可以是1 2 3 4 5 6 7
,默认情况下对应su mo tu we th fr sa
cal $varM $varY
:显示$varM
和$varY
输入参数的日历。在这种情况下:
August 2016
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
由于awk没有读取空字段,我们必须转换空字段以便检测它们。
sed 's/ / . /g'
:在遇到的3个空格的每个块的中间添加.
。
. August 2016 .
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 . . .
. . . . . . .
awk -v f="$varD" 'NR>2{if ($f ~ "\.") {next;} {print $f}}'
:
awk -v f="$varD"
:表示您正在阅读$varD
变量NR>2
:表示您正在跳过前两行 if ($f ~ "\.") {next;} {print $f}
:如果该字段是一个点,我们会跳过它。否则,我们打印出来。
3
10
17
24
31