実施環境: Splunk Free 8.2.2
0. 概要
Splunk の評価関数には tonumber 関数と tostring 関数の2つの関数が存在します。
名前的には変数の型を数値や文字列に変換するもののようですが、実はそうではありません。
今回はそんな2つの関数について解説していきます。
1. Splunk における変数型
そもそも、 Splunk において変数の型は Splunk 側である程度柔軟に処理してくれるため、意識することはまずありません。
| makeresults count=1
| eval NUM = 1.2, STR = "1.2"
| eval NUM_IF_NUM = if( NUM > 0, "OK", "NG"),
STR_IF_NUM = if( STR > 0, "OK", "NG"),
NUM_IF_STR = if( LEN(NUM) == 3, "OK", "NG"),
STR_IF_STR = if( LEN(STR) == 3, "OK", "NG")
では、 tonumber 関数、 tostring 関数は何のためにあるのでしょうか。
実は、2進数や16進数の値と通常の数値(10進数の値)を変換するのに用いられます。
2. tonumber
tonumber 関数は、2進数や16進数の値を通常の数値に変換します。
tonumber 関数は以下のように引数を指定することで、通常の数値を返します。
tonumber(N進数の値, N)
以下の例では、2進数の値を通常の数値に変換しています。
| makeresults count=1
| eval BASE2 = "01011110"
| eval BASE10 = tonumber(BASE2, 2)
3. tostring
tostring 関数は、通常の数値を16進数の値に変換します。
また、3桁毎にカンマ(,)を入れた数値や、秒数から時刻への変換といったフォーマットも指定できます。
tostring 関数は以下のように引数を指定することで、各フォーマットの値を文字列として返します。
tostring(数値, フォーマット)
フォーマットには以下の3種類が指定可能です。
フォーマット | 説明 | 例(変換前) | 例(変換後) |
---|---|---|---|
hex | 通常の数値から16進数への変換 | 2022 | 7E6 |
commas | 3桁毎にカンマ(,)を付与 | 1234567890 | 1,234,567,890 |
duration | 秒数からHH:MM:SSへの変換 | 1000 | 00:16:40 |
以下の例では、通常の数値「9999」を各フォーマットに変換しています。
| makeresults count=1
| eval NUM = 9999
| eval HEX = tostring(NUM, "hex"),
COM = tostring(NUM, "commas"),
DUR = tostring(NUM, "duration")
なお、注意点として、「 hex 」のみ小数に対応していません。
また、「 commas 」は小数の場合小数点以下2桁まで表示され、それより下は四捨五入されます。
「 duration 」は元の数値があまりに大きい場合、日数が先頭に示され、その直後にプラス(+)、時刻はさらにその後ろに記載されます。
| makeresults count=1
| eval NUM = 12345678.555555
| eval HEX = tostring(NUM, "hex"),
COM = tostring(NUM, "commas"),
DUR = tostring(NUM, "duration")