如何使用 --query 标志从输出的 json 中获取状态值?

How do I get the state value from the outputted json using the --query flag?

我 运行 这个 awscli 命令和我正在尝试使用 --query:

获取 'State' 键的值
ws emr describe-step --profile dev --cluster-id j-12345678 --step-id s-12345678abc 

输出:

{
    "Step": {
        "Status": {
            "Timeline": {
                "EndDateTime": 123456.632,
                "CreationDateTime": 1234566.779,
                "StartDateTime": 1623122991201544.588
            },
            "State": "COMPLETED",
            "StateChangeReason": {}
        },
        "Config": {
            "Args": [
                "s3-dist-cp",
                "--s3Endpoint",
                "s3.amazonaws.com",
                "--src",
                "s3://test-bucket/",
                "--dest",
                "s3://test-bucket-2"
            ],
            "Jar": "command-runner.jar",
            "Properties": {}
        },
        "Id": "s-123456789",
        "ActionOnFailure": "CONTINUE",
        "Name": "Command Runner"
    }
}

我想从输出中提取 'State' 键的值。如果可以的话,可以用 jq 代替吗?

我没有要测试的 EMR,但使用您的示例应该可行:

aws emr describe-step --profile dev --cluster-id j-12345678 --step-id s-12345678abc --query 'Step.Status.State'

这是一个使用 ec2 的示例,我知道 --query 有效:

aws ec2 describe-instances --query 'Reservations[].Instances[].InstanceId'

要使用 jq,您可以这样做:

aws emr describe-step --profile dev --cluster-id j-12345678 --step-id s-12345678abc |jq -r '.Step.Status.State'

参考文献

CLI Usage Filter