json - 使用 jq 生成字段值频率计数

标签 json stream histogram jq summary

我可以像这样从一个 JSON 字段中查询所有唯一值:

$ cat all.json | jq '.complianceState' | sort | uniq

"compliant"
"configManager"
"inGracePeriod"
"noncompliant"
"unknown"

我可以像这样迂腐地查询每个唯一字段值的频率计数:

$ cat all.json | jq '.complianceState' | grep '^"configManager"$' | wc -l

116

jq 中是否有一种方法可以一次性完成所有这些操作以产生如下输出:

{
    "compliant" : 123000,
    "noncompliant" : 2000,
    "configManager" : 116
}

最佳答案

来 self 的标准库:

# bag of words
# WARNING: this is not collision-free!
def bow(stream): 
  reduce stream as $word ({}; .[($word|tostring)] += 1);

有了这个,你可以使用过滤器:

bow(inputs | .complianceState)

与 -n 命令行选项一起使用。

总结

将所有这些整合在一起的一种方法是将上述 jq 行放在一个文件中,比如 bow.jq,然后按如下方式调用 jq:

jq -n -f bow.jq all.json

另一种方法是使用模块系统——参见 jq 手册和/或 Cookbook了解详情。

关于json - 使用 jq 生成字段值频率计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881716/

相关文章:

javascript - 使用 Play Framework 以 JSON 格式提交表单

python - 用kde绘制 Pandas 直方图?

javascript - fetch catch return JSON 中位置 0 处的意外标记 U

c# - 从外部服务流式传输视频

java - 可以从流中读取带符号的字节吗?

C: fscanf 不改变文件流

python - 如何在python中为非数字变量制作直方图

Python直方图位于精确解的右侧

foreach 循环中的 PHP JSON 编码

json - 带有 Spring Boot REST Controller 和 JSON 的空字段