Home > Software design >  Select multiple values from a split string in JQ
Select multiple values from a split string in JQ

Time:01-11

I see questions about selecting multiple values from an array using JQ, but I have a string that originally I just need the value after the last /, which is easily selected:

Input:

https://www.googleapis.com/compute/v1/projects/test-project-1/zones/europe-west1-b/instanceGroups/test-instance-group-1

JQ:

jq -r '.[]|.zone|=split("/")[-1]|"\(.name) \(.zone)"'

Output:

test-instance-group-1 europe-west1-b

However for the actual instances, the zone isn't listed, so must be extracted from the same key instance.

Input:

https://www.googleapis.com/compute/v1/projects/test-project-1/zones/europe-west1-b/instances/test-instance-1

JQ:

jq -r '.[]|.instance|=split("/")[-1]|"\(.instance)'

Output:

test-instance-1

However, I also want to extract the zone infomation, from the input as well, which I presume is selected with =split("/")[-3] however no matter how I format the request to JQ, I get errors:

$ jq -r '.[]|.instance|=split("/")[-1][-3]|"\(.instance)"'
jq: error (at <stdin>:47): Cannot index string with number

How can I extract two strings, from the same value/key ?

CodePudding user response:

You're looking for something like this:

jq -r '.[].instance | split("/") | "\(.[-1]) \(.[-3])"'
  • Related