Я начинаю с файла jsonlines, подобного этому
{ "kw": "foo", "age": 1}
{ "kw": "foo", "age": 1}
{ "kw": "foo", "age": 1}
{ "kw": "bar", "age": 1}
{ "kw": "bar", "age": 1}
Обратите внимание, что каждая строка является допустимой json, но весь файл не является.
Вывод Я search - упорядоченный список ключевых слов, отсортированный по его появлению. Например:
[
{"kw": "foo", "count": 3},
{"kw": "bar", "count": 2}
]
Я могу группировать и подсчитывать ключевые слова, используя параметр slurp
jq --slurp '. | group_by(.kw) | .[] | {kw: .[0].kw, count: . | length }'
Вывод:
{"kw":"bar","count":2}
{"kw":"foo","count":3}
Но:
- Это не отсортировано
- Это недопустимо JSON массив
Очень глупое решение, которое я нашел, - дважды пройти через jq
:)
jq --slurp --compact-output '. | group_by(.kw) | .[] | {kw: .[0].kw, count: . | length }' sample.json \
| jq --slurp --compact-output '. | sort_by(.count)'
Но я уверен, что кто-то умнее меня сможет найти более элегантное решение.