要将顶级密钥作为流获取,您可以使用内置功能 https://stedolan.github.io/jq/manual/#Builtinoperatorsandfunctions keys[]
。因此,解决您的特定问题的一种解决方案是:
jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'
keys
按排序顺序生成键名称;如果您希望它们按原始顺序排列,请使用keys_unsorted
.
另一种按原始顺序生成密钥的替代方案是:
jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'
CSV 和 TSV 输出
@csv 和 @tsv 过滤器也可能值得考虑,例如
jq -r 'to_entries[] | [.key, .value.ip] | @tsv'
产生:
host1 10.1.2.3
host2 10.1.2.2
host3 10.1.18.1
嵌入对象
如果按照以下示例嵌入感兴趣的键,则必须按照所示的行修改 jq 过滤器。
Input:
{
"myhosts": {
"host1": { "ip": "10.1.2.3" },
"host2": { "ip": "10.1.2.2" },
"host3": { "ip": "10.1.18.1" }
}
}
修改:
jq -r '.myhosts | keys[] as $k | "\($k), \(.[$k] | .ip)"'