Aqui está uma abordagem usando alguns exemplos de código e dados da minha resposta para uma pergunta semelhante no Stack Overflow.
Para escolher vários campos, você pode usar Objeto de Construção . Por exemplo, este filtro cria um objeto contendo apenas PublicDnsName
e VpcId
de cada instância:
.Reservations[]
| .Instances[]
| {PublicDnsName, VpcId}
Se esse filtro estiver em filter.jq
e os dados de amostra dessa outra resposta estiverem em data.json
, a execução
$ jq -M -f filter.jq data.json
produz
{
"PublicDnsName": "xxxxxxxx",
"VpcId": "vpc-eb09eb8e"
}
Depois de ter objetos contendo o que você deseja, os dados em outro formato (por exemplo, csv) são fáceis. Com esse filtro
.Reservations[]
| .Instances[]
| {PublicDnsName, VpcId}
| [.[]]
| @csv
e a opção -r
$ jq -M -r -f filter.jq data.json
jq produz
"xxxxxxxx","vpc-eb09eb8e"
Para adicionar uma condição de filtragem, por ex. VpcId não é nulo, adicione um selecione .
.Reservations[]
| .Instances[]
| {PublicDnsName, VpcId}
| select(.VpcId != null)
| [.[]]
| @csv