0

複数値フィールドから一致する文字列を抽出し、別の列に表示しようとしています。フィールドを区切り文字で分割し、mvexpand を使用してから、where/search を使用してそれらのデータを取得するさまざまなオプションを試しました。SPLUNK クエリでこの手間をかけずにこれを行う簡単な方法があるかどうかを見つけようとしていました。

例:複数値 column1 フィールドの下に、データが区切りコンマで区切られているとします。

column1 = abc1,test1,test2,abctest1,mail,send,mail2,sendtest2,new,code,results

区切り文字を使用してこの列を分割し、|eval column2=split(column1,",")regex/where/search を使用し*test*てこの列でデータを検索し、結果を返すことができましたが、結果を取得できましたが、column1 にはまだすべての値が表示abc1,test1,test2,abctest1,mail,send,mail2,sendtest2,new,code,results されています。column1と一致する単語のみを表示するか、新しいcolumn2testのエントリを表示します。test1,test2,abctest1,sendtest2*test*

よろしくお願いします。

4

2 に答える 2

0
| eval column2=split(column1,",") | search column2="*test*"

splitは、多数の値を含む単一フィールドを含む単一イベントである複数値フィールドを作成するため、機能しません。searchforは、少なくとも 1 つのフィールドが であるため、 など*test*を含んでいても、そのイベントを見つけます。abc1*test*

使用できるのはmvfilter、複数値フィールドを目的のイベントに絞り込むコマンドです。

| eval column2=split(column1,",") | eval column2=mvfilter(match(column2,".*test.*"))

このアプローチの代わりに、正規表現を使用して必要なものを抽出できます。

| rex field=column1 max_match=0 "(<?column2>[^,]*test[^,]*)"

mvjoinとにかく、最後に、複数の値を単一の文字列に結合するために使用する必要があります

| eval column2=mvjoin(column2, ",")
于 2020-09-02T01:01:08.700 に答える