json - 当谓词为 true 时计算元素数量

标签 json while-loop jq

我有一个 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/

相关文章:

json - 使用 jq 从每个主要节点版本获取最新版本

php - HTML通过JSON输出,通过ajax激活

json - 记录数据验证

mysql - 在 MySQL 中存储发票

java - 使用 php 和 JSON 将 android 连接到 mySQL

php同时mysql获取数组,一次更新每10个结果,

json - 在同一行打印多个值

json - 使用 jq 通过匹配多个对象来过滤 JSON 对象列表