![如何计算日期总和(以分钟为单位) Shell](https://linux22.com/image/1376684/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E6%97%A5%E6%9C%9F%E6%80%BB%E5%92%8C%EF%BC%88%E4%BB%A5%E5%88%86%E9%92%9F%E4%B8%BA%E5%8D%95%E4%BD%8D%EF%BC%89%20Shell.png)
我需要一些帮助,我不是 shell 脚本专家,但我正在尝试编写一个脚本,其中需要获取纪元号和日期,但要获取全天所有时间,间隔为 15 分钟。结果将类似于以下内容
1376708400|2013-08-17 00:00:00
1376709300|2013-08-17 00:15:00
1376710200|2013-08-17 00:30:00
总共有 96 行,我现在最大的疑问是如何将分钟数增加(或相加)15 分钟,我试过这个
我现在的完整脚本是这样的(我知道这很糟糕,但我并不是一个真正的程序员。我正在学习)
i=96
_incrementatime='+15 minutos'
count=1
_Date=$(`date "2013-08-29 00:00:00"`)
_dataEmSeg = `date -d "2013-08-29 00:00:00" +%s`
while test $i -ne 0
do
_VarData=$(`date --date="$_incrementatime*count"`)
_exprt=$(expr `$_Date+$_VarData`)
echo "$_dataEmSeg e $_exprt "
i=$((i-1))
count=$((count+1))
done
如果有人能告诉我如何解决这个问题,我将非常感激。
答案1
如果你使用 GNU date
,它几乎可以自己做所有事情:
#!/usr/bin/env bash
_Date=$(date -d "2013-08-29 00:00:00");
for ((i=0; i<96; i++)); do
echo $(date -d "$_Date" +%s)"|"$(date -d "$_Date" +"%F %T")
_Date=$(date -d "$_Date +15 minutes")
done
您的脚本中存在各种小错误和不必要的步骤,我已将其删除或更正。
答案2
你没有提到你使用的系统,但dseq(1)
我的日期工具收集产生一系列日期:
$ dseq '2013-08-17 00:00:00' +15m '2013-08-18 00:00:00' -f '%s|%F %T'
1376697600|2013-08-17 00:00:00
1376698500|2013-08-17 00:15:00
...
前 3 个参数表示序列的起点和终点,中间的参数表示增量(就像seq(1)
真的一样)。该-f
开关允许您指定输出格式,并采用与 GNU 中类似的格式说明符date
。