bash - 如何削减一年中每个月的第一个星期日至星期六?

标签 bash perl awk

我们有绿色区域逻辑,其中作业仅在每个第一个星期日至星期六之间运行,即从每个月的第一个星期日开始的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/

相关文章:

python - 使用 pexpect 检测 bash 输出的结尾

perl - 用于解析 PDF 文件的 CPAN Perl 模块

regex - 计算正则表达式通配符匹配的字符串中特定字符的匹配次数

text - 将 txt 文件合并为一个文件,然后再次将它们拆分回来

git - 检查 authorized_keys 以查看哪个 key 用于推送提交

linux - 如何告诉ffmpeg按顺序遍历目录中的所有文件

perl - 如何在 Perl 中解析 strftime 格式的字符串?

Perl,从文本文件第 2 列中的每个值中减去 8

regex - 替换文件中最后一次出现的字符串

linux - bash: ./script.sh: 参数列表太长