如何计算值存在的次数?

时间:2016-11-17 10:17:59

标签: regex apache-nifi

我的数据就像这样..,

[123:1000,156,132,123,156,123]
[123:1009,392,132,123,156,123]
[234:987,789,132,123,156,123]
[234:8765,789,132,123,156,123]

我需要使用nifi中的表达式语言计算每行中存在“123”的次数。

我只需要用表达式语言来做。我怎么算呢?

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:2)

根据documentation,计数是这样完成的:

${allMatchingAttributes(".*"):contains("123"):count()}

答案 1 :(得分:2)

您应该使用SplitContent处理器将流文件内容拆分为每行的单个流文件,然后将ExtractTextpattern = (123)?这样的正则表达式一起使用,这将导致为每个匹配组添加到流文件中的属性:

[123:1009,392,132,123,156,123] -> pattern.1, pattern.2, pattern.3 [234:987,789,132,123,156,123] -> pattern.1, pattern.2

最后,您可以使用ScanAttribute处理器检测每个流文件中具有最高组计数的属性,并将其路由到UpdateAttribute以将该值放入公共流文件属性(即count)。您还可以使用ExecuteStreamCommand替换某些步骤,并使用各种操作系统级工具(grep / awk / sed / cut /等。)执行计数,返回该值,并更新流文件的内容。

ExecuteScript处理器中执行此计数操作可能更简单,因为它可以在1-2行Groovy,Ruby,Python或Javascript中完成,并且不需要多个处理器。 Apache NiFi专为数据路由和简单转换而设计,而不是复杂的事件处理,因此没有为这些任务开发的标准处理器。 "Add processor to perform simple aggregations"有一个开放的Jira,其中有一个patch available here,可能对您有用。