2017-05-16 7 views
1

Ich versuche, jq zu verwenden, um mehrere Elemente von einem JSON-Objekt zurückzugeben. Die Daten werden von einem AWS cli Nachschlag kommen, ist dies nur ein winziger Abschnitt der Ausgabe:mit jq, um mehrere Elemente zurückzugeben?

{ 
"ReservedInstancesOfferings": [{ 
     "OfferingClass": "convertible", 
     "OfferingType": "No Upfront", 
     "AvailabilityZone": "ap-southeast-2a", 
     "InstanceTenancy": "default", 
     "PricingDetails": [], 
     "ProductDescription": "Linux/UNIX", 
     "UsagePrice": 0.0, 
     "RecurringCharges": [{ 
      "Amount": 0.167, 
      "Frequency": "Hourly" 
     }], 
     "Marketplace": false, 
     "CurrencyCode": "USD", 
     "FixedPrice": 0.0, 
     "Duration": 94608000, 
     "Scope": "Availability Zone", 
     "ReservedInstancesOfferingId": "1fc8c02b-bcc0-42b8-82ef-47c6f6d1c1b5", 
     "InstanceType": "c4.xlarge" 
    }, 
    { 
     "OfferingClass": "convertible", 
     "OfferingType": "No Upfront", 
     "AvailabilityZone": "ap-southeast-2a", 
     "InstanceTenancy": "dedicated", 
     "PricingDetails": [], 
     "ProductDescription": "Red Hat Enterprise Linux", 
     "UsagePrice": 0.0, 
     "RecurringCharges": [{ 
      "Amount": 0.243, 
      "Frequency": "Hourly" 
     }], 
     "Marketplace": false, 
     "CurrencyCode": "USD", 
     "FixedPrice": 0.0, 
     "Duration": 94608000, 
     "Scope": "Availability Zone", 
     "ReservedInstancesOfferingId": "24aaceee-f54e-4882-aba3-ce710a5036c9", 
     "InstanceType": "c4.xlarge" 
    } 
] 

}

Ich versuche, um die Felder zu extrahieren:

.ReservedInstancesOfferings[].ProductDescription 
.ReservedInstancesOfferings[].InstanceType 
.ReservedInstancesOfferings[].RecurringCharges[].Amount 

würde ich mag ausgeben, um so zu erscheinen:

Wie Sie oben sehen können, verstehe ich, wie man alle Elemente indi extrahiert Ich kann nicht herausfinden, wie man sie alle zusammenbringt, um die gewünschte Ausgabe zu erreichen. Ich habe versucht, die Abfragen mit einem Komma zu trennen, aber das liefert nicht die gewünschte Ausgabe.

Jede Hilfe würde sehr geschätzt werden.

Vielen Dank!

EDIT:

Oh oh, ich habe es! Volle Antwort ist unten. Junge oh Junge jq ist mächtig!

Hoffentlich hilft dies jemand :)

+0

Sie eigene Antwort hinzufügen sollten , anstatt nur die Frage zu bearbeiten. –

+0

Ja, ich bin ein wenig aufgeregt :) Die Antwort ist unten. –

Antwort

2

OK, so habe ich es geschafft zu bekommen, was ich nach war. Ich habe noch ein wenig Aufraeumen zu tun, wie einige der Eingabefelder sind nicht ganz einheitlich, aber es ist nahe genug nach vorne mit bewegen:

aws ec2 describe-reserved-instances-offerings --availability-zone "ap-southeast-2a" --instance-type "c4.xlarge" | 
jq '.ReservedInstancesOfferings[] | [.ProductDescription, .InstanceType, .RecurringCharges[].Amount]' 

Ausgang:

[ 
    "Linux/UNIX", 
    "c4.xlarge", 
    0.167 
] 
[ 
    "Red Hat Enterprise Linux", 
    "c4.xlarge", 
    0.243 
] 
[ 
    "Red Hat Enterprise Linux", 
    "c4.xlarge", 
    0.227 
] 
[ 
    "Linux/UNIX", 
    "c4.xlarge", 
    0.183 
] 
[ 
    "SUSE Linux", 
    "c4.xlarge", 
    0.2 
] 
Verwandte Themen