从两个纯文本文件中收集键和值

时间:2020-04-15 09:18:46

标签: json jq

我尝试在zabbix中为portworx卷做LLD,但是我对JSON没有太多的经验。我有两个文件:

文件1

10.10.10.100
10.10.10.101
10.10.10.102

文件2

host 1
host 2
host 3

然后我可以使用cat raw_name | jq -R '.' | jq -s '{NAME:map({"{#NAME}":.})}'将它们转换为JSON并得到:

{
  "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 个答案:

答案 0 :(得分:2)

使用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