jq выберите поле на основе содержит из другого поля

#jq

Вопрос:

Я пытаюсь вытащить из этого списка ip_prefix данные, основанные на том, где находится регион us-west- , и перечислить их в формате csv. Когда я пытаюсь jq '.prefixes[] | .ip_prefix,.region | select(contains("us")?)' file.json , я получаю только список регионов.

 {  "syncToken": "15985471",  "createDate": "2021-10-08-20-13-16",  "prefixes": [  {  "ip_prefix": "3.5.140.0/22",  "region": "ap-northeast-2",  "service": "AMAZON",  "network_border_group": "ap-northeast-2"  },  {  "ip_prefix": "13.34.37.64/27",  "region": "ap-southeast-4",  "service": "AMAZON",  "network_border_group": "ap-southeast-4"  },  {  "ip_prefix": "35.180.0.0/16",  "region": "eu-west-3",  "service": "AMAZON",  "network_border_group": "eu-west-3"  },  {  "ip_prefix": "52.93.153.170/32",  "region": "eu-west-2",  "service": "AMAZON",  "network_border_group": "eu-west-2"  },  {  "ip_prefix": "52.93.178.234/32",  "region": "us-west-1",  "service": "AMAZON",  "network_border_group": "us-west-1"  }  ] }  

Ответ №1:

У вас фильтры в неправильном порядке. Попробуй:

 jq '.prefixes[] | select(.region|startswith("us-west")) | .ip_prefix' <your json file>   

Это позволяет получить prefixes массив, отфильтровать элементы, в которых регион начинается с «сша-запад», а затем выбрать ip_prefix .