日本語版SPL Example用
cf. foreach
ここは譲れないでしょう。
説明
ワイルドカードフィールドリスト内の各フィールドに対して、テンプレート化されたストリーミングサブサーチを実行します。
わかりません。でも大事なことが書いてありますね
ワイルドカードフィールドリスト
*
のこと。 *
は文字列順に処理されます。
1,2,10,20
だと1,10,2,20
の順です。
field_*
とか使えます。
*_*
については後ほど。
ストリーミングサーチ
ストリーミング
なので_Fundamental 1_を思い出してください。
使えないSPLはわかりますね。わからない方はFundamental 1をまずやってみてください。Freeなコースです。
記述
foreach <wc-field>... [fieldstr=<string>] [matchstr=<string>] [matchseg1=<string>] [matchseg2=<string>] [matchseg3=<string>] <subsearch>
必須引数
wc-field_と_subsearch
*
を使えると書いています。でも、どちらかというとフィールドを複数かけますの方が大事だと思う。
なお、この*
、フィールドに使えない文字が入っていると、<<FIELD>>の結果が化けます。
また、_フィールド名
は読みません。_time
や_raw
は関係なし。
オプション引数
fieldstr | matchstr | matchseg1、2、3 |
---|---|---|
フィールドそのもの |
* で一致した文字列 |
*が複数の場合の 一致した文字列 |
ただこちらについては<<FIELD>>、<<MATCHSTR>>、<<MATCHSEG1..3>>を別な文字に変えるだけです。<<FIELD>> とか使えない場合ってなんだろう![]() |
用例
foreach
の考え方は横に処理をしていく
2つのレコードで同一カラムの差分がとりたいでforeach
を使っているときの
| foreach *
[ eval <<FIELD>>=trim(<<FIELD>>)]
複数のフィールドの余計な空白を削除するために使用している。
matchsegはこちらを参照。簡単な例は下に。
| makeresults
| fillnull a_b_c
| foreach *_*_* [eval <<MATCHSEG3>><<MATCHSEG2>><<MATCHSEG1>> = '<<FIELD>>']
multivalueを分割するではmultivalueをsingleにするためにforeach
を使用している。
foreach
の制御外にするためにrename
を使用して_フィールド
にしているのはすごいコツ。
Splunkでプログラムっぽいことをするでループを実装している
まとめ
使えるけど、難易度が高いのがforeach
複数のフィールドに対して同一の処理ができるで十分だと思います。
複数のフィールドを無理やり作るやり方は質問してください