如何使用 JMESPath 对来自 AWS CLI 的 JSON 输出进行排序

How to sort JSON output from AWS CLI using JMESPath

我尝试按 ImageId 对 AWS CLI 的输出进行排序,然后我执行了下面的命令。

aws ec2 describe-images --profile xxxxxxxxxx \ --filter Name=tag:Name,Values=Backup*some-string* \ --query "Images[*].[Tags[?Key=='Name'].Value[]|[0],ImageId]"

输出为:

[
    [
        "Backup-20191215T174530Z-utc-some-string",
        "ami-004"
    ],
    [
        "Backup-20191219T174631Z-utc-some-string",
        "ami-002"
    ],
    [
        "Backup-20191208T174534Z-utc-some-string",
        "ami-001"
    ],
    [
        "Backup-20191222T174530Z-utc-some-string",
        "ami-003"
    ],
    [
        "Backup-20191221T174530Z-utc-some-string",
        "ami-005"
    ]
]

我发现 sort_by JMESPath 的功能可能是一个解决方案,但这太难理解了。

我的想法是,在我下面的解决方案中,我首先按 ImageId 对输出进行排序,然后应用投影。

aws ec2 describe-images --filter Name=tag:Environment,Values=Staging --output json --query "(sort_by(Images[], &ImageId))[*].[ImageId, Tags[?Key=='Environment'].Value | [0]]"
aws ec2 describe-images --profile xxxxxxxxxx \
--filter Name=tag:Name,Values=Backup*some-string* \
--query "sort_by(Images[*].[Tags[?Key=='Name'].Value[]|[0],ImageId], &[0]"

aws ec2 describe-images --profile xxxxxxxxxx \
--filter Name=tag:Name,Values=Backup*some-string* \
--query "Images[*].[Tags[?Key=='Name'].Value[]|[0],ImageId] | sort_by(@, &[0])"

对我来说工作正常。 &(表达式类型运算符)是必需的。