2016-12-19 4 views
0

BASHを使用して、開始日から終了日まで10分間隔でループします。 試しましたBASHループニング時間

begin_date="2015-01-01 00:00:00" 
end_date="2015-02-20 00:00:00" 
d=$begin_date 
while [ "$d" != "$end_date" ]; do 
    echo $d 
    d=$(date -d "${d} + 10 min" +"%Y-%m-%d %H:%M") 
done 

しかし、動作しませんでした。お探しですか?Bash:Looping thru dates

フォーマット文字列には何がありますか?

+0

"それは機能しませんでした"。どのような出力が生成されますか? – fedorqui

+0

10分または1日を追加しませんでした。 – Miles

+0

あなたがリンクしている質問は、 '-I'がなぜ重要なのかを具体的に説明していますが、とにかくそれを取り出しました。 – tripleee

答えて

1

あなたは少しだけ調整する必要があるためにリンクされている例:オプション-I-dはそれぞれ--iso-8601と​​と同等であることを

#!/bin/bash 

## User-specified dates. 
# See [GNU Coreutils: Date] for more info 
# [GNU Coreutils: Date]: https://www.gnu.org/software/coreutils/manual/html_node/Combined-date-and-time-of-day-items.html#Combined-date-and-time-of-day-items 
begin_date="2015-01-01T00:00" 
end_date="2015-01-01T00:40" 

# Run through `date` to ensure iso-8601 consistency 
startdate=$(date --iso-8601='minutes' --date="${begin_date}") 
enddate=$(date --iso-8601='minutes' --date="${end_date}") 

# Do loop 
d="$startdate" 
while [ "$d" != "$enddate" ]; do 
    echo $d 
    d=$(date --iso-8601='minutes' --date="$d + 10 minutes") 
done 

は注意してください。

+0

ありがとう、Sigve、あなたの答えも動作します。複数の回答を正しいものとしてチェックできるかどうかはわかりません。 – Miles

+0

さらなるテストで、私はSigveの答えを受け入れるように変更しています。私は1ヶ月間、両方の方法を実行しました。 Sigveのは、しかし、私は答えを変更した理由若干速い(ただしあまりないことで) tripleeeの本当の1m1.310sユーザー0m1.156sのsys 0m55.953s @対 Sigveの本当の0m57.308suser 0m0.953sのsys 0m52.250s ました日付(古い/新しいパス(YYYYMMDD)と古い/新しい名前foo_HHMM)から派生した4つの変数が必要であり、上記のコードは日付を再フォーマットしやすく、他のコードはそうではありませんでした。 – Miles

+1

開始日と終了日のマイナーな修正。 Z(つまりUTC)は使用しないでください。 'code' begin_date =" 2015-01-01T00:00 " end_date =" 2015-01-01T00:40 " ' code' – Miles

2

date -d "${d} + 10 min"は、オフセットが10分の日付を生成しないようです。実際に、コードを実行すると、日付カウンタはに戻ります。(この診断をあなたの質問の一部として投稿すると、他の人が問題のどこにいるのか分かりやすくなります。コードを実行するだけでコードを実行する必要はありません)。日付をUnix epochに変換し、そこから取り出します。

for ((d=$(date -d "$begin_date" +%s); d <= $(date -d "$end_date" +%s); d += 600)) 
do 
    date -d @$d +"%F %H:%M" 
done 

実行中の日付の算術演算は、おそらく効率が悪くなります。これを例えばに変換する。 AwkやPerlは、それが遅すぎると感じたり、何度も実行する必要がある場合には、時間の価値があるかもしれません。

+0

ありがとう、コードは完全に動作します。それと約8時間戦っている!私はあなたの答えを理解するためにGoogleのエポックタイムを持っていた:-) – Miles

+0

フィードバックありがとうございました。 Wikipediaのリンクが追加されました。 – tripleee

+0

私はまた、この+ + 10分という時にこの珍しい時間を経験しました。 – fedorqui

関連する問題