ИНДЕКС встроенный с вводом - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь построить ИНДЕКС из файла json, который содержит список плоских объектов.

Если я использую конструкцию

jq 'INDEX(.a + ":" + .b)' < data.json 

, я получаю то, что хочу.Но если я использую

jq 'INDEX(input; .a + ":" + .b) data.json

, я получаю сообщение об ошибке

jq: error (at data.json:<last-line>): break

Причина, по которой мне нужно использовать вторую форму, заключается в том, что мне нужно присоединиться к другой input кИндекс первого, и я не вижу, как это сделать из STDIN.

Есть идеи, как мне обойти это?

(В настоящее время работает jq-1.6 на MacOS 10.13.6)

Добавление ввода (data.json):

[
    {
        "a": "a1",
        "b": "b1",
        "c": "c1",
        "d": "d1"
    },
    {
        "a": "a2",
        "b": "b2",
        "c": "c2",
        "d": "d2"
    },
    {
        "a": "a3",
        "b": "b3",
        "c": "c3",
        "d": "d3"
    }
]

И ожидаемый вывод

{
  "a1:b1": {
    "a": "a1",
    "b": "b1",
    "c": "c1",
    "d": "d1"
  },
  "a2:b2": {
    "a": "a2",
    "b": "b2",
    "c": "c2",
    "d": "d2"
  },
  "a3:b3": {
    "a": "a3",
    "b": "b3",
    "c": "c3",
    "d": "d3"
  }
}

1 Ответ

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

Первый аргумент INDEX/2 должен быть потоком элементов, которые будут проиндексированы;здесь .[] именно то, что мы хотим:

INDEX(.[]; .a + ":" + .b) 
...