Moshe
Moshe

Reputation: 5159

Selecting multiple conditionals in JQ

I've just started using jq json parser, is there anyway to choose multiple select? I have this:

cat file | jq -r '.Instances[] | {ip: .PrivateIpAddress, name: .Tags[]}
                               | select(.name.Key == "Name")'

And I need to also include the .name.Key == "Type"

This is the JSON:

{
  "Instances": [
    {
      "PrivateIpAddress": "1.1.1.1",
      "Tags": [
        {
          "Value": "Daily",
          "Key": "Backup"
        },
        {
          "Value": "System",
          "Key": "Name"
        },
        {
          "Value": "YES",
          "Key": "Is_in_Domain"
        },
        {
          "Value": "PROD",
          "Key": "Type"
        }
      ]
    }
  ]
}

And this is the current output:

{
  "ip": "1.1.1.1",
  "name": "System"
}
{
  "ip": "2.2.2.2",
  "name": "host"
}
{
  "ip": "3.3.3.3",
  "name": "slog"
}

Desired output:

{
  "ip": "1.1.1.1",
  "name": "System",
  "type": "PROD"
}
{
  "ip": "2.2.2.2",
  "name": "host",
  "type": "PROD"
}
{
  "ip": "3.3.3.3",
  "name": "slog",
  "type": "PROD"
}

What is the right way to do it? Thanks.

Upvotes: 0

Views: 823

Answers (1)

Jeff Mercado
Jeff Mercado

Reputation: 134611

There's no "right" way to do it, but there are approaches to take that can make things easier for you.

The tags are already in a format that makes converting to objects simple (they're object entries). Convert the tags to an object for easy access to the properties.

$ jq '.Instances[]
    | .Tags |= from_entries
    | {
        ip:   .PrivateIpAddress,
        name: .Tags.Name,
        type: .Tags.Type
      }' file

Upvotes: 2

Related Questions