如何优化jq输出

时间:2018-08-24 23:42:38

标签: python json csv parsing jq

我有一个json文件。一个简单的示例如下:

[
{
  "host": "a.com",
  "ip": "1.2.2.3",
  "port": 8,
  "name":"xyz"
},
{
  "host": "b.com",
  "ip": "2.5.0.4",
  "port": 3,
  "name":"xyz"

},
{
  "host": "c.com",
  "ip": "9.17.6.7",
  "port": 4,
  "name":"xyz"
}
]

我想提取“主机”和“ ip”值,并将它们添加到以逗号分隔的值文件中。一行中的每条记录如下:

a.com,1.2.2.3
b.com,2.5.0.4
c.com,9.17.6.7

我安装了jq库来解析json文件。我执行了以下命令:

cat test.json | jq '.[] | {host: .host, ip: .ip}'

我得到的输出如下:

{
  "host": "a.com",
  "ip": "1.2.2.3"
}
{
  "host": "b.com",
  "ip": "2.5.0.4"
}
{
  "host": "c.com",
  "ip": "9.17.6.7"
}

有什么方法可以根据需要提取输出? jq生成的此输出需要其他脚本来解析它,并将所需的值以csv格式保存,一行中只有一项。

2 个答案:

答案 0 :(得分:0)

使用@csv格式从值数组中产生CSV输出。

cat test.json | jq -r '.[] | [.host, .ip] | @csv'

需要-r选项来获取原始输出,而不是JSON,这会在结果周围包裹一整套引号,并转义包围每个字段的引号。

答案 1 :(得分:0)

要删除引号:

$ cat test.json | jq -r '.[] | [ .host, .ip ] | @csv' | sed 's/"//g'
a.com,1.2.2.3
b.com,2.5.0.4
c.com,9.17.6.7

如果使用OS X,请使用Homebrew安装GNU sed