Quero gerar uma chave específica de uma lista de hashes como linhas onde cada item externo do array é separado por uma linha vazia. Para ilustrar:
A entrada é:
[
[
{
"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"
}
]
]
A saída esperada é:
url-1
url-2
url-a
url-b
Agora, posso obter a saída que desejo usando o seguinte:
cat input.txt | jq 'walk(if type == "object" then (.url | select( . != null)) end) | .[] | select(length > 0)' | jq 'join("\n")' | jq -rs 'join("\n\n")'
Há dois problemas aqui:
- Escolher o valor de uma chave específica, sem destruir a hierarquia e manipular valores nulos potenciais (porque a chave não existia, ou na verdade era
null
) é tudo manipulado pela primeirajq
invocação, então obtemos uma lista de uma lista de strings - A segunda e a terceira invocação transformam isso na saída desejada, uma lista de strings (brutas), onde cada URL obtém sua própria linha, e as diferentes entradas da matriz externa são separadas por uma linha vazia.
Mas parece que deve haver uma solução mais fácil para qualquer um desses problemas, especialmente para o segundo.