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

운영 체제: 데비안 스트레치

답변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
  }
}

관련 정보