【问题标题】:Shellscript output entire interval between datesShell 脚本输出日期之间的整个间隔
【发布时间】:2016-01-25 21:53:35
【问题描述】:

我正在使用需要接收格式为文本文件的时间说明的设备,以便在基于小时的时间范围内制作备份副本。它有 4 个频道,所以我仍然需要标记这些频道。 格式为 MMDDhhmmYYYY;C(其中 MM=月,DD=日,hh=24 小时制,mm=分钟,YYYY=年,C=频道号)

假设我需要为通道 1 和 2 指定 2016 年 1 月 25 日 14:00 和 2016 年 1 月 25 日 16:00 之间的 2 小时间隔,我需要在文本文件中添加 4 行。

012514002016;1
012514002016;2
012515002016;1
012515002016;2    

对于小型查询手动执行此操作是可以的,但是对于 4 个频道的一整天,我必须编写 96 行。 我愿意制作一些脚本来指定开始日期和时间、结束日期和时间以及要请求的通道,然后将输出打印到所需格式的文本文件中,但我什至不知道从哪里开始。我看到很多脚本可以计算日期之间的间隔,但实际上没有显示间隔。客户端环境有限,但至少是bash 4.0

【问题讨论】:

  • 我假设你对“日期格式”没有发言权(我觉得这非常愚蠢——人们为什么不使用 ISO!?!)?
  • 设备上指定了日期格式。不幸的是,没有办法改变它。我什至不知道为什么我必须输入分钟数字,因为设备只能在 00 分钟进行搜索。
  • 在 GNU 上你可以使用它有帮助吗? date -d 'Mon Jan 25 15:14:11 PST 2016 + 1 hour' 增加一小时,date -d 'Mon Jan 25 16:14:11 PST 2016' +'%m%d%H%M%Y;1' 格式化?

标签: linux bash shell date intervals


【解决方案1】:

好吧,这是一个开始。这只会增加小时数,不会将小时数转换为数天,或数分钟数到数小时,或者实际上是任何时间。

#!/bin/sh

MM=$1
dd=$2
hh=$3
mm=$4
yyyy=$5

h2=$6

ni=$7

while [ $ni -gt 0 ]; do
  for i in 1 2 3 4; do
    printf '%02d%02d%02d%02d%04d;%d\n' $MM $dd $hh $mm $yyyy $i
  done
  hh=$(($hh + $h2))
  ni=$(($ni - 1))
done

所以要在一天内做 12 个 2 小时的增量:

$ sh interval 01 25 14 00 2016 2 12

【讨论】:

  • printf 的第一个$mm 应该是$MM
猜你喜欢
  • 2015-08-06
  • 1970-01-01
  • 2011-03-24
  • 1970-01-01
  • 2010-10-09
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多