У меня есть папка с более чем 1000 журналами запросов (сгенерированными в час / день) в следующем формате:
[
{
"input": {
"random_param_name_1": "random_value_1",
"random_param_name_2": "random_value_2",
"random_param_name_3": "random_value_3",
"random_param_name_4": "random_value_4"
},
"output": {
"some_key_we_dont_care_about": "some_value_we_dont_care_about"
},
"status_code": 200
},
{
"input": {
"random_param_name_1": "random_value_1",
"random_param_name_4": "random_value_4",
"random_param_name_3": "random_value_3",
"random_param_name_5": "random_value_5"
},
"output": {
"some_key_we_dont_care_about": "some_value_we_dont_care_about"
},
"status_code": 200
}
]
И мне нужно найти все входные запросы, которые являются уникальными. Для этого мне нужно сделать две вещи:
- отсортировать ключи в
input
, поскольку разные входы могут иметь одинаковые ключи, но в разном порядке - распечатать все ключ и значение в в одну строку, чтобы я мог направить вывод в
sort | uniq
, чтобы получить все уникальные комбинации ввода.
Обратите внимание, что клавиши ввода являются случайными, большинство существующих вопросов в stackoverflow аналогичного вида Знайте ключи заранее, но здесь дело обстоит не так.
Я могу напечатать ключ и значения следующим образом:
jq -r 'keys[] as $k | "\($k):(.[$k])"'
но они в конечном итоге окажутся в новых строках.
Подводя итог, для вышеупомянутого json мне нужно magic_expression
$ jq 'magic_expression' log.json
, которое вернет
"random_param_name_1":"random_value_1","random_param_name_2":"random_value_2","random_param_name_3":"random_value_3","random_param_name_4":"random_value_4"
"random_param_name_1":"random_value_1","random_param_name_3":"random_value_3","random_param_name_4":"random_value_4","random_param_name_5":"random_value_5"