Splunk:在列表中查找值的一部分

时间:2017-01-12 12:43:38

标签: splunk

我有两个CSV文件:

  • 在第一个文件中,有一个机器主机名列表(例如:ABCZER12)。
  • 在第二个文件中,我有一个机器主机名的第一个字母列表(例如:ABC),每个表达式对应一个位置(例如:欧洲,巴西......)。

第一个文件的示例:

  • ABCZER12
  • ABCSDF56
  • ABCFHG76
  • OPQYGT65
  • XYTGHY41
  • XYZRFV78

第二个文件的示例:

  • ABC =>欧洲
  • OPQR =>巴西
  • XY => USA

我需要将每个主机名与其​​对应的位置相关联。为此,我需要搜索每个主机名,如果它与第二个列表中的一个表达式开始匹配。示例:ABCZER12,ABCSDF56和ABCFHG76将与ABC匹配,表示这些主机名对应于欧洲的位置。

某些主机名无法匹配第二个列表中的任何表达式(例如:OPQYGT65)。

在第二个文件中,表达式并不总是具有相同数量的字母。

在这两个文件中,没有相同的列,所以我认为我不能使用查找来解决我的问题。

如果有人有想法解决我的问题,那就太好了。

谢谢:)

1 个答案:

答案 0 :(得分:0)

假设:

  • 第一个文件是source.csv,
  • sources.csv的标题是“主持人”
  • 第二个文件是places.csv
  • places.csv的标题是“前缀”和“国家”
  • 新的所需字段为国家/地区

查询:

|inputlookup source.csv |table host

|eval 
[|inputlookup places.csv |table prefix Country 
|eval search="like(host, \""+prefix+"%\"),\""+Country+"\"," 
|stats values(search) as search |nomv search 
|eval search=substr(search,1,length(search)-1) 
|eval search="Country=case("+search+")" |table search]

说明: Splunk将在places.csv中运行subsearch并将表转换为一个eval字符串:

Country=case(like(a, "ABC%"),"Europe", like(a, "OPQR%"),"Brazil", like(a, "XY%"),"USA")

然后我们在子搜索之前使用“| eval”来使用该eval。

结果就像一个查找操作,但带有前缀,而不是精确的单词检测。