Zsh/AWKで平日08:00-16:00+RANDの一連のタイムスタンプを生成するには?

Zsh/AWKで平日08:00-16:00+RANDの一連のタイムスタンプを生成するには?

ZSH / AWK / ...を介して2017年11月11日から2017年12月12日までの一連のタイムスタンプを作成し、毎日08:00に開始し、16:00+RANDに終了する方法を考えてください。あります。一日の終わりはランダムに終わるなど、30分の差がなければなりません。予想出力の例

11.11.2017 08:00 - 16:15
12.11.2017 08:00 - 16:03
...
12.12.2017 08:00 - 15:25

オペレーティングシステム:Debianストレッチ

答え1

strftimezsh/datetimeカレンダー時間をUnix epoch(使用-r)またはその逆に変換するためにモジュールで使用されます。乱数生成には$RANDOMinを使用できますが、kshこれは15ビット整数または(関数rand48()内)数学関数にすぎません。zsh/mathfunc

#! /bin/zsh -
start=11.11.2017
end=12.12.2017
TZ=UTC0 # timezone doesn't matter here. We use UTC0 to make sure there's
        # DST/change

zmodload zsh/datetime
zmodload zsh/mathfunc

strftime -rs start_t %d.%m.%Y $start
strftime -rs end_t %d.%m.%Y $end

for ((t = start_t; t <= end_t; t += 24*60*60)) {
  strftime -s weekday %u $t
  if ((weekday < 6)) { # Monday to Friday
    strftime -s s '%d.%m.%Y %H:%M' $((t + 8 * 60*60))
    strftime -s e '%H:%M' $((t + 16*60*60 - 15*60 + int(rand48() * 30*60)))
    print $s - $e
  }
}

関連情報