我正在尝试创建一系列从 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
描述,这些行被删除。