我有一个 JSON 对象的集合,如下所示:
{"id":"da1234563","message":"brown fox jump over a red log"}
{"id":"da1234564","message":"brown fox jump over a red log"}
{"id":"da1234565","message":"brown fox jump over a red log"}
{"id":"da1234566","message":"brown fox jump over a red log"}
{"id":"da1234567","message":"red fox jump over a brown log"}
{"id":"da1234568","message":"another random string"}
{"id":"da1234569","message":"brown fox jump over a red log"}
我想使用jq
来迭代这些对象并返回brown Fox
的跳跃次数,直到找不到匹配项。
下面的jq
给了我每一行棕色狐狸,包括最后一行:
jq -n 'inputs|select(.message|test("brown fox"))'
如何排除不匹配后的匹配项并计算匹配项的数量,以便 jq
仅返回 4
?
最佳答案
为了提高效率,最好避免“吸食”输入,正如 Q 中所设想的,在这种情况下可以通过使用 input
(或 inputs
) 和 -n 命令行选项。
使用面向流的计数函数和内置的 while
:
def count(s): reduce s as $x (0; .+1);
count(while (input | .message|test("brown fox"); true) )
替代方案
def count(s): reduce s as $x (0; .+1);
def select_while(s; cond):
label $out | s | if cond then . else break $out end;
count( select_while(inputs; .message|test("brown fox") ) )
关于json - 当谓词为 true 时计算元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68499385/