首页 > 解决方案 > 如何 sort_by 使用 jq 获取最新对象

问题描述

所以我运行这个:

aws ec2 describe-snapshots \
    --region xxxxxxxxx \
    --owner-ids xxxxxxxxxxxx \
    | jq '.Snapshots[] | select(.VolumeId=="vol-xxxxxxxxxxxxx")'

我得到了这个https://jqplay.org/s/SnT8lDwycY

我如何排序StartTime并返回 latest "SnapshotId": "snap-xxxxxxxxxxxxxxxx"

当我添加时,| sort_by(.StartDate)'我得到以下错误:

jq: error (at <stdin>:22106): Cannot index string with string "StartDate"

标签: jsonamazon-web-servicesamazon-ec2jq

解决方案


jqplay 上显示的数据是 JSON 对象流。处理这种流的一种方法是使用 jq 的 -s 命令行选项。这实际上将它们组合成一个列表,然后可以对其进行排序。

所以如果你不关心关系,一个简单的解决方案是:

sort_by(.StartTime) | .[-1] | .SnapshotId

如果您的 jq 足够最新,则可以将其缩写为:

sort_by(.StartTime)[-1].SnapshotId

推荐阅读