我想将哈希列表中的特定键输出为行,其中每个外部数组项都由空行分隔。为了说明:
输入是:
[
[
{
"visible": true,
"url": "url-1"
},
{
"visible": true
},
{
"visible": false,
"url": "url-2"
}
],
[
{
"visible": true,
"url": "url-a"
},
{
"visible": true,
"url": null
},
{
"visible": false,
"url": "url-b"
}
]
]
预期输出为:
url-1
url-2
url-a
url-b
现在,我可以使用以下命令获取我想要的输出:
cat input.txt | jq 'walk(if type == "object" then (.url | select( . != null)) end) | .[] | select(length > 0)' | jq 'join("\n")' | jq -rs 'join("\n\n")'
这里有两个问题:
- 选择特定键的值,而不会破坏层次结构并处理潜在的空值(因为键不存在,或者实际上不存在
null
)都由第一次jq
调用处理,因此我们得到了一个字符串列表的列表 - 第二次和第三次调用将其转换为所需的输出,即(原始)字符串列表,其中每个 URL 都有自己的行,并且不同的外部数组条目由空行分隔。
但对于这两个问题似乎应该有一个更简单的解决方案,特别是第二个问题。