Отключить все звуки ноутбука, кроме звука конференции Zoom

Чтобы получить все имена пользователей, т. е. всю строку, связанную с ключом login, из правильно сформированного документа JSON , не зная структуры документа:

jq -r '..|select(.login?).login' file.json

Применение этого к нескольким файлам JSON, а также сортировка и подсчет результата:

jq -r '..|select(.login?).login' *.json | sort | uniq -c

Здесь используется выражение jq

  • ..:Повторный просмотр всех ключей и значений.
  • select(.login?):Выберите обнаруженные объекты, содержащие ключ login.
  • .login:Получите значение для этого ключа.

Словарь, который вы хотели бы иметь, основанный на приведенном выше jqвыражении:

jq -sr '[..|select(.login?).login]|group_by(.)|map({key:.[0],value:length})|from_entries' *.json

Тестирование:

$ cat file.json
{"this":"is", "A":{"login":"username2"}, "type":{"of":"object", "but":"please"},
 "go":"withit", "login":"me"}
$ jq -sr '[..|select(.login?).login]|group_by(.)|map({key:.[0],value:length})|from_entries' file.json
{
  "me": 1,
  "username2": 1
}

Дважды передать один и тот же файл:

$ jq -sr '[..|select(.login?).login]|group_by(.)|map({key:.[0],value:length})|from_entries' file.json f
ile.json
{
  "me": 2,
  "username2": 2
}

Используйте jqс -cдля получения однострочного компактного вывода.

Для нашего примера файла jq -sr '[..|select(.login?).login]' file.jsonдаст

[
  "me",
  "username2"
]

Прохождение через group_by(.)дает

[
  [
    "me"
  ],
  [
    "username2"
  ]
]

Часть map({key:.[0],value:length})дает

[
  {
    "key": "me",
    "value": 1
  },
  {
    "key": "username2",
    "value": 1
  }
]

и from_entriesв конце дают окончательный результат.

1
19.05.2020, 12:56
0 ответов

Теги

Похожие вопросы