日期范围(分钟)

日期范围(分钟)

我正在尝试创建一系列从 01/01/2010 到 01/02/2010 的日期,其中分钟的距离不均匀,如下所示:

2010  1  1  00  00  00
2010  1  1  00  20  00
2010  1  1  00  30  00
2010  1  1  00  40  00
2010  1  1  01  00  00
2010  1  1  01  20  00
2010  1  1  01  30  00
2010  1  1  01  40  00

...
2010  2  1  00  00  00

因此,每小时的 00 分钟、20 分钟、30 分钟和 40 分钟,直到结束日期。我找到了有问题的帮助https://stackoverflow.com/questions/15621409/print-dates-in-date-range-linux 但我无法添加分钟,更不用说用空格代替“-”和不均匀的步骤了。这是我到目前为止的代码,它不起作用:

startdate=2010-01-01-00-00-00
enddate=2010-02-01-00-00-00

curr="$startdate"
while true; do
    echo "$curr"
    [ "$curr" \< "$enddate" ] || break
    curr=$( date +%Y-%m-%d-%H-%M-%S --date "$curr +10 minutes" )
done

如何以这些间隔(中间有空格)创建上面的输出?

答案1

我是这样做的:

$ date -d '2010-01-01 00:00:00' +%s
1262300400
$ date -d '2010-02-01 00:00:00' +%s
1264978800

$ for timestamp in {1262300400..1264978800..600}; do date -d @"$timestamp" '+%Y %m %d %H %M %S'; done | grep -Ev '[15]0 00$'

什么grep -Ev '[15]0 00$'是:

  • grep本身选择与其参数描述的一组条件相匹配的行
  • -v:选择与参数不匹配的行
  • -E:声明我们将尝试匹配的模式是“扩展正则表达式”(实际上这里不需要 - 我的错误)
  • [15]0 00$:一个正则表达式,表示“选择以“1或5”结尾的行,然后是“零”,然后是“空格”,然后是“双零”。这与“10”和“50”行匹配,由于上述-v描述,这些行被删除。

相关内容