ジョブが実行された時間(分)に基づいて情報を抽出するサードパーティのスクリプトを使用します。スクリプトにはこの入力が必要です。
たとえば、
これは例です。
export etool_start=`date +"%Y%m%d%H%M:"`
私のデフォルトスクリプトは、開始時刻と終了時刻の間で実行されます。
export etool_end=`date +"%Y%m%d%H%M"`
上記の結果の出力は201607050220:201607050230と同じです。時間は0220~0230です。私のスクリプトはこの日付タイプを受け入れず、-0010(10分)などの分だけを受け入れます。この結果を得るのに役立つ数学をどのように作成できますか?私が提示した時間は一例に過ぎず、サンプリング間隔は2分から120分、1日まで可能です。この種の出力を取得するには、dateコマンドをどのように使用しますか?
助けてください。
ありがとうございます。
答え1
エポック( )以降の時間を秒単位で測定する方がはるかに簡単です。+%s
次に、減算して秒単位の経過時間を探し、秒を分に変換するには60で割ります。
export etool_start=$(date +"%s")
do_stuff_with_etool
export etool_stop=$(date +"%s")
echo "elapsed time=$(( (etool_stop - etool_start)/60 )) minutes"
人間の形の時間が本当に必要な場合は変換できます。 GNUの使用date
:
$ date -d "@$etool_start"
Tue Jul 5 21:30:19 PDT 2016
または:
$ date -d "@$etool_start" "+%Y%m%d%H%M"
201607052130
書式設定に関する追加情報
経過時間をさまざまな形式で分単位で表示するには、を使用できますprintf
。たとえば、4桁の経過時間を生成するには、次の形式を使用できます%04i
。
$ printf '%04i\n' "$(( ($etool_stop - $etool_start)/60 ))"
0001
の形式は%4i
4桁の整数(i)を提供します。先行スペースの代わりに先行ゼロが必要な場合はを使用します%04i
。
数字の逆符号が必要な場合:
$ printf '%05i\n' "$(( ($etool_start - $etool_stop)/60 ))"
-0035
マイナス記号には追加の文字が必要なので、割り当てられたスペースを4から5に増やします%05i
。
その他の回避策
上記の例ではbash算術を使用しているので、整数にすぎません。経過時間を分単位(分単位を含む)として確認するには、次のようbc
な他のツールを使用できます。
$ echo "($etool_stop - $etool_start)/60" | bc -l
1.38333333333333333333
エポックから数秒経過しましたか?
epoch 以降の秒数はman date
次のように定義されます。
1970-01-01 00:00:00 UTC以降%s秒
このように定義されているので、ローカルタイムゾーンは重要ではありません。したがって、-u
「現地時間帯」または世界時間での計算に違いはありません。
$ date +%s; date -u +%s
1467780345
1467780345
答え2
バッシュから:
$ export etool_starting=`date -u +"%s"`
$ export etool_ending=`date -u +"%s"`
数分しかかからない場合:
$ printf '%05d\n' "$(( (etool_starting - etool_ending) / 60 ))"
-0120 ### If 120 minutes have elapsed in between.