Я хотел бы записать сценарий удара, который распечатывает дату в следующем формате:
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
Действительно ли возможно сделать это легко с датой или другим методом?
Печатайте каждую дату в промежутке времени
внутри цикла. Я бы добавил пошаговую отметку времени (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 распечатывает именно тот список, который вы описали. Итак, это сделано. Я думаю, что некоторые трещины сделали бы это короче / лучше, но это работает ...
удачи