私は2010年1月1日から2010年1月2日まで一連の日付を生成しようとしています。分の間隔は次のとおりです。
2010 1 1 00 00 00
2010 1 1 00 20 00
2010 1 1 00 30 00
2010 1 1 00 40 00
2010 1 1 01 00 00
2010 1 1 01 20 00
2010 1 1 01 30 00
2010 1 1 01 40 00
...
2010 2 1 00 00 00
だから終了日まで毎時間00分、20分、30分、40分ずつ。問題の助けを見つけました。https://stackoverflow.com/questions/15621409/print-dates-in-date-range-linux しかし、「-」を空白と不均一な段階に変えることはもちろん、分を追加することもできません。これは私のコードで、これはうまくいきません。
startdate=2010-01-01-00-00-00
enddate=2010-02-01-00-00-00
curr="$startdate"
while true; do
echo "$curr"
[ "$curr" \< "$enddate" ] || break
curr=$( date +%Y-%m-%d-%H-%M-%S --date "$curr +10 minutes" )
done
これらの間隔(間にスペースを含む)を使用して上記の出力をどのように生成できますか?
答え1
これが私がする方法です:
$ date -d '2010-01-01 00:00:00' +%s
1262300400
$ date -d '2010-02-01 00:00:00' +%s
1264978800
$ for timestamp in {1262300400..1264978800..600}; do date -d @"$timestamp" '+%Y %m %d %H %M %S'; done | grep -Ev '[15]0 00$'
何grep -Ev '[15]0 00$'
ですか:
grep
独自に引数として記述される一連の条件に一致する行を選択します。-v
:パラメータと一致しない行を選択します。-E
:私たちが一致させようとするパターンが「拡張正規表現」であると宣言します(実際にはここでは必要ありません。私の間違いです)。[15]0 00$
:「1または5」で終わる行の選択、「0」、「空白」、「二重0」を選択する正規表現です。これは、「10」および「50」行と一致します。された-v
。