我从类似于此的 jsonlines 文件开始
{ "kw": "foo", "age": 1}
{ "kw": "foo", "age": 1}
{ "kw": "foo", "age": 1}
{ "kw": "bar", "age": 1}
{ "kw": "bar", "age": 1}
请注意,每一行都是有效的 json,但整个文件不是。
我正在寻找的输出是按其出现次数排序的关键字的有序列表。像这样:
[
{"kw": "foo", "count": 3},
{"kw": "bar", "count": 2}
]
我可以使用以下方法对关键字进行分组和计数slurp
option
jq --slurp '. | group_by(.kw) | .[] | {kw: .[0].kw, count: . | length }'
Output:
{"kw":"bar","count":2}
{"kw":"foo","count":3}
But:
我发现的一个非常愚蠢的解决方案是通过两次jq
:)
jq --slurp --compact-output '. | group_by(.kw) | .[] | {kw: .[0].kw, count: . | length }' sample.json \
| jq --slurp --compact-output '. | sort_by(.count)'
但我很确定比我聪明的人可以找到更优雅的解决方案。