сгруппировать элемент с JQ - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть следующий json:

{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d2"},"org":"TΙ UIH","rc":{"$event":"13"}}
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d3"},"org":"TΙ UIH","rc":{"$event":"13"}}
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d4"},"org":"AB KIO","rc":{"$event":"13"}}
{"us":{"$event":"5bbf4a4f43d8950b5b0cc6d5"},"org":"GH SVS","rc":{"$event":"17"}}

Как мне добиться следующего результата?(tsv)

13 TΙ UIH 2
13 AB KIO 1
17 GH SVS 1

так далеко от того, что я искал,

jq -sr 'group_by(.org)|.[]|[.[0].org, length]|@tsv'

как я могу добавить еще одну group_by для достижения желаемого результата?

1 Ответ

0 голосов
/ 09 ноября 2018

Мне удалось получить ожидаемый результат из вашего образца JSON, используя следующее:

group_by(.org, .rc."$event")[] | [.[0].rc."$event", .[0].org, length] | @tsv

Вы можете попробовать это на jqplay.org .

Модификация предложения group_by гарантирует, что у нас будет одна запись на пару .org / .rc.$event (без нее у нас будет только одна запись на .org, которая может скрыть некоторую .rc.$event).

Затем мы добавляем .rc.$event к массиву, который вы создаете, так же, как вы сделали с .org, получая доступ к значению первого элемента массива, так как мы знаем, что они все равно одинаковы.

Чтобы отсортировать результат, вы можете поместить его в массив и использовать sort_by(.[0]), который будет сортировать по первому элементу строк:

[group_by(.org, .rc."$event")[] | [.[0].rc."$event", .[0].org, length]] | sort_by(.[0])[] | @tsv
...