Соберите ключи и значения из двух текстовых файлов - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь сделать LLD в zabbix для томов portworx, но у меня нет большого опыта работы с JSON. У меня есть два файла:

файл 1

10.10.10.100
10.10.10.101
10.10.10.102

файл 2

host 1
host 2
host 3

, и я могу превратить их в JSON с помощью cat raw_name | jq -R '.' | jq -s '{NAME:map({"{#NAME}":.})}' и получить:

{
  "NAME": [
    {
      "{#NAME}": "host 1"
    },
    {
      "{#NAME}": "host 2"
    },
    {
      "{#NAME}": "host 3"
    }
  ]
}

но как я могу использовать их обоих, чтобы получить что-то вроде этого

[
  {
    "{#IP}": "10.234.8.100",
    "{#NAME}": "host 1"
  },
  {
    "{#IP}": "10.234.8.101",
    "{#NAME}": "host 2"
  },
  {
    "{#IP}": "10.234.8.102",
    "{#NAME}": "host 3"
  }
]

1 Ответ

2 голосов
/ 15 апреля 2020

Объедините входные файлы рядом, используя paste. Затем в JQ разделите каждую строку на символ табуляции (paste - стандартный выходной разделитель) и используйте полученные части для построения объектов.

paste file1 file2 | jq -Rn '[
  inputs
  | split("\t")
  | {"{#IP}": .[0], "{#NAME}": .[1]}
]'

Без paste становится немного сложнее:

jq -Rn '[ inputs ]
| (length / 2) as $i
| [ .[:$i], .[$i:] ]
| transpose
| map({"{#IP}": .[0], "{#NAME}": .[1]})' file1 file2
...