1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

foreach

Last updated at Posted at 2020-02-21

日本語版SPL Example
cf. foreach
ここは譲れないでしょう。

説明

ワイルドカードフィールドリスト内の各フィールドに対して、テンプレート化されたストリーミングサブサーチを実行します。

わかりません。でも大事なことが書いてありますね

ワイルドカードフィールドリスト

*のこと。 *は文字列順に処理されます。
1,2,10,20だと1,10,2,20の順です。:sweat:
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>>とか使えない場合ってなんだろう:thinking:

用例

foreachの考え方は横に処理をしていく
2つのレコードで同一カラムの差分がとりたいforeachを使っているときの

trim.spl
 | foreach * 
     [ eval <<FIELD>>=trim(<<FIELD>>)]

複数のフィールドの余計な空白を削除するために使用している。

matchsegはこちらを参照。簡単な例は下に。

matchseg.spl
| makeresults
| fillnull a_b_c
| foreach *_*_* [eval <<MATCHSEG3>><<MATCHSEG2>><<MATCHSEG1>> = '<<FIELD>>']

multivalueを分割するではmultivalueをsingleにするためにforeachを使用している。
foreachの制御外にするためにrenameを使用して_フィールドにしているのはすごいコツ。

Splunkでプログラムっぽいことをするでループを実装している

まとめ

使えるけど、難易度が高いのがforeach
複数のフィールドに対して同一の処理ができるで十分だと思います。
複数のフィールドを無理やり作るやり方は質問してください

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?