ときどき必要となるのでメモ。
実施環境: Splunk Free 8.2.2
Splunk のジョブの実行時間ログなどは秒単位の値で出力されます。
それを HH : MM : SS 形式に変換する方法を考えてみます。
まず、元の秒単位の値を以下のように切り分けます。
- 時 : 60で2回割り、小数点以下を切り下げる
- 分 : 60で1回割り、小数点以下を切り下げ、60で割った余りをとる
- 秒 : 60で割った余りをとり、小数点以下を切り下げる
- ミリ秒 : 小数点以下を切り下げた値を元の値から引き、1000をかける
Splunk
| makeresults
| eval SECONDS = 7650.001
| eval TIME_H = floor(SECONDS / 60 / 60),
TIME_M = floor(SECONDS / 60) % 60,
TIME_S = floor(SECONDS % 60),
TIME_Q = (SECONDS - floor(SECONDS)) * 1000
これだけだと上記のように桁数が揃わないので、 printf 関数を使用して桁数を揃えます。
Splunk
| makeresults
| eval SECONDS = 7650.001
| eval TIME_H = printf("%02d", floor(SECONDS / 60 / 60)),
TIME_M = printf("%02d", floor(SECONDS / 60) % 60),
TIME_S = printf("%02d", floor(SECONDS % 60)),
TIME_Q = printf("%03d", (SECONDS - floor(SECONDS)) * 1000)
あとはこれらを文字列として結合すれば完了です。
Splunk
| makeresults
| eval SECONDS = 7650.001
| eval TIME_H = printf("%02d", floor(SECONDS / 60 / 60)),
TIME_M = printf("%02d", floor(SECONDS / 60) % 60),
TIME_S = printf("%02d", floor(SECONDS % 60)),
TIME_Q = printf("%03d", (SECONDS - floor(SECONDS)) * 1000)
| eval TIME = TIME_H + ":" + TIME_M + ":" + TIME_S + "." + TIME_Q
| table TIME, SECONDS