저는 jq를 처음 접했고 json 파일에서 일치하는 값의 상위(특정 수준)를 가져와야 하는 시나리오가 있습니다. 아래는 샘플 데이터입니다.
{
"DevOps": {
"us-east-1": {
"i-049aa9a3bddb4****": {
"AmiLaunchIndex": 0,
"ImageId": "ami-00068cd7555f543d5",
"InstanceId": "i-049aa9a3bddb4*****",
"InstanceType": "t2.nano",
"LaunchTime": "2019-11-24 18:39:25+00:00",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "us-east-1a",
"GroupName": "",
"Tenancy": "default"
},
"PrivateDnsName": "ip-10-250-128-77.ec2.internal",
"PrivateIpAddress": "10.250.128.77",
"ProductCodes": [],
"PublicDnsName": "",
"Tags": [
{
"Key": "Name",
"Value": "Network-Test-Host"
}
],
},
"i-0368117434*****": {
"AmiLaunchIndex": 0,
"ImageId": "ami-078137ecf12552edf",
"InstanceId": "i-0368117434******",
"InstanceType": "c5.2xlarge",
"KeyName": "infra-systems-prod-key",
"LaunchTime": "2020-02-13 15:51:15+00:00",
"Monitoring": {
"State": "disabled"
},
"Placement": {
"AvailabilityZone": "us-east-1a",
"GroupName": "",
"Tenancy": "default"
},
"PrivateDnsName": "ip-10-250-138-161.ec2.internal",
"PrivateIpAddress": "10.250.138.161",
"ProductCodes": [],
"PublicDnsName": "",
"Tags": [
{
"Key": "Name",
"Value": "Network-Test-Host"
}
],
},
}
}
}
예를 들어 검색 값이 "10.250.128.77"인 경우 "i-049aa9a3bddb4****"라는 상위 항목을 가져와야 합니다. 값이 "Network-Test-Host"이면 2개의 인스턴스 ID(i-049aa9a3bddb4****, i-0368117434*****) 목록이 제공됩니다. 그런 다음 이 시점부터 모든 키를 반복하여 호스트 이름, ImageId, 인스턴스 유형과 같은 해당 값을 얻을 수 있습니다.
이에 대한 도움을 주시면 대단히 감사하겠습니다.
답변1
특정 개인 IP 주소를 사용한 쿼리:
jq '.DevOps."us-east-1" | map_values(select( .PrivateIpAddress == "10.250.128.77" ))' file
명령줄 매개변수에서 쿼리 IP 주소를 가져오기 위한 매개변수화:
jq --arg addr 10.250.128.77 \
'.DevOps."us-east-1" | map_values(select( .PrivateIpAddress == $addr ))' file
Key
특정 태그를 사용한 쿼리 Value
:
jq '.DevOps."us-east-1" | map_values(select( IN(.Tags[]; {Key: "Name", Value: "Network-Test-Host"}) ))' file
명령줄 인수에서 합계를 얻으려면 매개변수화하세요 Key
.Value
jq --arg Key Name --arg Value Network-Test-Host \
'.DevOps."us-east-1" | map_values(select( IN(.Tags[]; $ARGS.named) ))' file
.DevOps."us-east-1"
이 명령은 쿼리와 일치하는 입력 문서 부분의 키+값을 포함하는 단일 개체를 포함하는 JSON 문서를 생성합니다 .
각 명령의 공통점은 select()
섹션의 값에 명령문을 적용한다는 것입니다 .DevOps."us-east-1"
. 부울 표현식은 쿼리로 테스트하려는 섹션에 따라 달라집니다. 부울 표현식으로 평가되는 부분진짜다른 모든 비트는 삭제되는 동안 유지됩니다.