Como gerar um intervalo de timestamps nos dias úteis das 08: 00-16: 00 + RAND por Zsh / AWK?

0

Estou pensando em como gerar um intervalo de registros de data e hora nos dias úteis de 11/11/2017 a 12/12/2017 por ZSH / AWK / ... de modo que cada dia comece às 08:00 e termine às 16:00 + RAND. O final do dia deve ter algum final aleatório, etc por variância de 30 min. Exemplo de saída esperado

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

SO: Debian Stretch

    
por Léo Léopold Hertz 준영 21.04.2018 / 06:59

1 resposta

1

Use strftime no módulo zsh/datetime para converter um horário do calendário para Unix epoch (com -r ) ou vice-versa. Para geração de números aleatórios, você tem $RANDOM como em ksh , mas isso é apenas um inteiro de 15 bits ou a função rand48() math (na função 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
  }
}
    
por 22.04.2018 / 15:45

Tags