Распечатайте определенные даты в определенном формате

Я хотел бы записать сценарий удара, который распечатывает дату в следующем формате:

20120205_16
(year)(month)(day)_(24 hour)

так команда, чтобы сделать это для текущей даты:

date +'20%y%m%d_%H'

То, что я хотел бы сделать, распечатать каждую дату как это (использование для цикла или чего-то) от указанной даты до другого. Например:

20120205_16 -> 20120305_18 would be:

20120205_16
20120205_17
20120205_18
...
20120305_17
20120305_18

Действительно ли возможно сделать это легко с датой или другим методом?

2
задан 20 July 2012 в 11:01

1 ответ

Печатайте каждую дату в промежутке времени

  1. Я бы взял ваши date1 и date2 и преобразовал бы их в метки времени
  2. Затем я бы исследовал: что 1 час конвертируется в метку времени.
  3. И написать цикл for из отметки времени (date1) в отметку времени (date2)

внутри цикла. Я бы добавил пошаговую отметку времени (1 час), преобразовав новую отметку времени обратно в предпочтительный формат даты / времени и распечатайте его до конца цикла. #

#!/bin/bash
# by user85321 @ ask ubuntu
# call: ./script.sh 20120205_16 20120205_16 20120305_18

# STEP 1:
# set userdefined Dateformat to normal
d1=$(echo "$1" | sed 's/_/ /g')
d2=$(echo "$2" | sed 's/_/ /g')

# set normalized dates to timestamps
t1=$(date --utc --date "$d1" +%s)
t2=$(date --utc --date "$d2" +%s)

# STEP 2:
# time increment, 1h = 3600 s
h=3600

# STEP 3:
if [ $t2 -gt $t1 ]
then
    for i in $(seq $t1 $h $(($t2-$h)))
    do  
        # take this and do what you want to do ;o)      
        echo $(date --date="@$i" "+%Y%m%d_%H")
    done
fi

Мой bash распечатывает именно тот список, который вы описали. Итак, это сделано. Я думаю, что некоторые трещины сделали бы это короче / лучше, но это работает ...

удачи

0
ответ дан 20 July 2012 в 11:01

Другие вопросы по тегам:

Похожие вопросы: