Здесь мне нужна помощь, я не специалист по написанию сценариев оболочки, но я пытаюсь сделать сценарий, в котором мне нужно взять номер эпохи с последующей датой, но для всех часов дня с интервалом 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

Если кто-то может дать мне указания, как решить эту проблему, я буду очень благодарен.

2 ответа2

0

Если вы используете 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

В вашем скрипте были различные мелкие ошибки и ненужные шаги, которые я удалил или исправил.

0

Вы не упомянули систему, в которой находитесь, но есть dseq(1) из моей коллекции dateutils, которая выдает последовательность дат:

$ 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 позволяет указать формат вывода и принимает спецификаторы формата, аналогичные указанным в date GNU.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .