我正在尝试计算与某个属性匹配的记录数。
如果json像这样:
[
{
"id": 0,
"count": 1
},
{
"id": 1,
"count": 1
},
{
"id": 2,
"count": 0
}
]
我正在尝试获取计数为1的记录数。
我可以通过以下方式获取匹配记录:
$ jq '.[] | select(.count == 1)' in.json
{
"id": 0,
"count": 1
}
{
"id": 1,
"count": 1
}
但是输出列出了两个项,所以我不能直接使用length
来计数它们。相反,使用length给出每个项的长度。
$ jq '.[] | select(.count == 1) | length' in.json
2
2
如何计算select
匹配了多少条记录?
3条答案
按热度按时间3mpgtkmj1#
为了提高效率,应该避免在构造的数组上使用
length
。相反,最好使用面向流的方法。这里有一个有效的解决方案,为了方便起见,它使用了通用的
count
函数,定义为:有了这个def,解决方案很简单:
zf9nrax12#
使用
jq 'map(select(.count==1))|length' in.json
。参见
jq
手册中的select
示例:https://stedolan.github.io/jq/manual/#select(boolean_expression)kq4fsx7k3#
尝试将
select
括在方括号[]
中。我认为这是最简单的答案,与已经给出的答案相比。