2016-11-15 1 views
0

방금 ​​jq json 파서를 사용하기 시작 했으므로 어쨌든 select을 여러 개 선택해야합니까? 나는이 있습니다JQ에서 여러 조건 선택하기

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

을 그리고 나는 또한 포함 할 필요가 .name.Key == "Type"

이것은 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" 
     } 
     ] 
    } 
    ] 
} 

그리고 이것은 현재 출력 :

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

원하는 출력 :

{ 
    "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" 
} 

올바른 방법은 무엇입니까? 감사.

답변

2

"올바른"방법은 없지만 더 쉽게 수행 할 수있는 방법이 있습니다.

태그는 이미 객체로 변환하는 형식 (객체 항목)으로되어 있습니다. 태그를 객체로 변환하면 속성에 쉽게 액세스 할 수 있습니다.

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

감사합니다. 이 쿼리는 jq play에서 작동하지만 내 우분투 시스템에서는 jq에서 작동하지 않습니다. 내가 얻을 :'JQ : 오류 : 개체 키 null를 사용할 수 없습니다 {: 널 (null), "이름": 널 (null), "IP" "유형"널 } 데이터에'@Jeff 메르 카도 – Moshe

+0

이 모든 태그를 수행해야 'key' 값은? 오류는 일부는 그렇지 않음을 나타냅니다. –

+0

아니, 나는 모두가 아니라고 생각한다. 오류를 피할 수있는 방법이 있습니까? @Jeff Mercado – Moshe