我们有绿色区域逻辑,其中作业仅在每个第一个星期日至星期六之间运行,即从每个月的第一个星期日开始的7天。我正在使用下面的awk命令来获取该信息,但是它在某个地方坏了。我只是尝试前3个月,即1月至3月
seq 75 | awk ' BEGIN {ti=" 0 0 0"}
function dtf(fmt,dy) { return strftime(fmt,mktime("2020 1 " dy ti)) }
{ day=dtf("%A %F",$0);mm=dtf("%m",$0);if(day~/Sunday/ || a[mm]) a[mm]++ ; if(a[mm]<8) print day } '
我的输出如下,这是不正确的:
Wednesday 2020-01-01
Thursday 2020-01-02
Friday 2020-01-03
Saturday 2020-01-04
Sunday 2020-01-05
Monday 2020-01-06
Tuesday 2020-01-07
Wednesday 2020-01-08
Thursday 2020-01-09
Friday 2020-01-10
Saturday 2020-01-11
Saturday 2020-02-01
Sunday 2020-02-02
Monday 2020-02-03
Tuesday 2020-02-04
Wednesday 2020-02-05
Thursday 2020-02-06
Friday 2020-02-07
Saturday 2020-02-08
Sunday 2020-03-01
Monday 2020-03-02
Tuesday 2020-03-03
Wednesday 2020-03-04
Thursday 2020-03-05
Friday 2020-03-06
Saturday 2020-03-07
预期产量:
Sunday 2020-01-05
Monday 2020-01-06
Tuesday 2020-01-07
Wednesday 2020-01-08
Thursday 2020-01-09
Friday 2020-01-10
Saturday 2020-01-11
Sunday 2020-02-02
Monday 2020-02-03
Tuesday 2020-02-04
Wednesday 2020-02-05
Thursday 2020-02-06
Friday 2020-02-07
Saturday 2020-02-08
Sunday 2020-03-01
Monday 2020-03-02
Tuesday 2020-03-03
Wednesday 2020-03-04
Thursday 2020-03-05
Friday 2020-03-06
Saturday 2020-03-07
如何调整awk命令以获得预期的输出?
也欢迎使用其他bash工具的任何其他解决方案。
最佳答案
我建议使用以下替代awk的方法:
#! /usr/bin/env bash
for month in {01..03}; do
for day in {01..13}; do
date -d "2020-$month-$day" '+%A %F'
done |
grep -A6 -m1 -F Sunday
done
该脚本不是很有效,但是可以完成任务。对于每个月,我们只需打印该月前13天的日期。我们知道绿色区域必须在该区域中,因此我们不需要该月的剩余日期。
日期格式为
Weekday YYYY-MM-DD
。我们使用grep
查找并打印第一个星期日,在该星期日之后打印6天(-A6
),然后退出,因为我们将搜索限制为一个匹配项(-m1
)。第1个月到第3个月中的每个月都要执行上述过程。
关于bash - 如何削减一年中每个月的第一个星期日至星期六?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61607761/