日本語版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
複数のフィールドに対して同一の処理ができるで十分だと思います。
複数のフィールドを無理やり作るやり方は質問してください