2016-09-06 7 views
0

Ich versuche, eine Eigenschaft aus einem JSON-Dokument mit jq zu greifen. Ich möchte den neuesten Snapshot mit einem bestimmten Namen erhalten. Hier ist die jq statment in bash, der gut arbeitet, bis ich die Auswahl hinzufügen mit FilterMit jq wählen, um JSon nicht zu filtern

snapid=aws redshift describe-cluster-snapshots --region us-west-2 | jq'.[] | select(.ClusterIdentifier=="dev-cluster") | max_by(.SnapshotCreateTime) | .SnapshotIdentifier' 

Hier wird die json doc ich bin ziehen. Es gibt mehrere Snapshot-Einträge, aber dies ist der, auf den ich ausgerichtet bin.

{ 
    "Snapshots": [   
     { 
       "EstimatedSecondsToCompletion": 0, 
       "OwnerAccount": "45645641155", 
       "CurrentBackupRateInMegaBytesPerSecond": 6.2857, 
       "ActualIncrementalBackupSizeInMegaBytes": 22.0, 
       "NumberOfNodes": 3, 
       "Status": "available", 
       "VpcId": "myvpc", 
       "ClusterVersion": "1.0", 
       "Tags": [], 
       "MasterUsername": "ayxbizops", 
       "TotalBackupSizeInMegaBytes": 192959.0, 
       "DBName": "dev", 
       "BackupProgressInMegaBytes": 22.0, 
       "ClusterCreateTime": "2016-09-06T15:56:08.170Z", 
       "RestorableNodeTypes": [ 
        "dc1.large" 
       ], 
       "EncryptedWithHSM": false, 
       "ClusterIdentifier": "dev-cluster", 
       "SnapshotCreateTime": "2016-09-06T16:00:25.595Z", 
       "AvailabilityZone": "us-west-2c", 
       "NodeType": "dc1.large", 
       "Encrypted": false, 
       "ElapsedTimeInSeconds": 3, 
       "SnapshotType": "manual", 
       "Port": 5439, 
       "SnapshotIdentifier": "thismorning" 
     } 
    ] 
} 

Ich bekomme den Fehler, kann Array mit Zeichenfolge "ClusterIdentifier" nicht indizieren.

+2

Der Start Ihres Filters sollte wahrscheinlich '.Snapshots [] | sein ... ' –

+0

@JeffMercado Schreiben Sie dies als Antwort, so kann ich es als die richtige markieren. Vielen Dank! – RagePwn

+0

In diesem Fall denke ich, es wäre angemessener, einfach als ein einfacher Tippfehler zu schließen. Ansonsten können Sie gerne selbst antworten, wenn Sie möchten. –

Antwort

0

Wie wäre es damit?

jq '.[]|map(select(.ClusterIdentifier=="dev-cluster")) 
    |max_by(.SnapshotCreateTime)|.SnapshotIdentifier'