私はlinuxを使い慣れています。特定の日付範囲に日付を印刷して保存するにはどうすればよいですか?日付範囲の日付をlinux
たとえば、私はstartdate = 2013-03-01とenddate = 2013-03-25を持っています。私はその範囲内のすべての日付を印刷したいと思います。
、秒にあなたの日付を変換する少し数学を行うと、バック変換するために、事前
私はlinuxを使い慣れています。特定の日付範囲に日付を印刷して保存するにはどうすればよいですか?日付範囲の日付をlinux
たとえば、私はstartdate = 2013-03-01とenddate = 2013-03-25を持っています。私はその範囲内のすべての日付を印刷したいと思います。
、秒にあなたの日付を変換する少し数学を行うと、バック変換するために、事前
使用date
のおかげで:
#/bin/bash
dstart=2013-03-01
dend=2013-03-25
# convert in seconds sinch the epoch:
start=$(date -d$dstart +%s)
end=$(date -d$dend +%s)
cur=$start
while [ $cur -le $end ]; do
# convert seconds to date:
date [email protected]$cur +%Y-%m-%d
let cur+=24*60*60
done
は日付パラメータの詳細はman date
を参照してください。..
として、日付がYYYY-MM-DD形式である限り、それらを辞書編集で比較し、最初に秒に変換せずにdate
にカレンダーの計算をさせます:
startdate=2013-03-15
enddate=2013-04-14
curr="$startdate"
while true; do
echo "$curr"
[ "$curr" \< "$enddate" ] || break
curr=$(date +%Y-%m-%d --date "$curr +1 day")
done
[ ... ]
では、入力リダイレクション演算子との混同を避けるため、<
をエスケープする必要があります。
これは、開始日が終了日よりも大きい場合は、開始日を印刷します。
代替あなたが「最近」の日付をしたい場合は、次のとおりです。
echo {100..1} | xargs -I{} -d ' ' date --date={}' days ago' +"%Y-%m-%d"
は明らかに、任意の日付範囲のために動作しません。
これは私が考えている最良の答えの終わりです。私はそれを変更しました: $ startdate = '2016-03-01';エコー{0..10} | xargs -I {} -d "'date --date =" $ startdate + "{}" days "+"%Y-%m-%d " 2016-03-01 2016-03-02 2016- 03-03 .... – user5672998
別のオプションdateutils
からdateseq
(http://www.fresse.org/dateutils/#dateseq)を使用することです:
$ dateseq 2013-03-01 2013-03-25
2013-03-01
2013-03-02
2013-03-03
2013-03-04
2013-03-05
2013-03-06
2013-03-07
2013-03-08
2013-03-09
2013-03-10
2013-03-11
2013-03-12
2013-03-13
2013-03-14
2013-03-15
2013-03-16
2013-03-17
2013-03-18
2013-03-19
2013-03-20
2013-03-21
2013-03-22
2013-03-23
2013-03-24
2013-03-25
若干改善バージョン
#!/bin/bash
startdate=2013-03-15
enddate=2013-04-14
curr="$startdate"
while true; do
[ "$curr" \< "$enddate" ] || { echo "$curr"; break; }
echo "$curr"
curr=$(date +%Y-%m-%d --date "$curr +1 day")
done
それでは、テスト後に ''エコー "$のCURR" を行います;) 。 'date --date" $ curr +1 day "'は 'let cur = ..'よりも良いです –
安全であるためにはwhileループではなく、forループに入れた方がいいでしょう。スクリプト内でstartdateとenddateをパラメータ化する場合、ループの最大実行回数は366回または1000回です。これは無限にループしないようにします。 – ekangas