选择和过滤数组中的最新元素



我有以下示例数据:

{
    "Images": [
        {
            "Name": "CoreOS-alpha-1939.0.0-hvm",
            "CreationDate": "2014-12-24T23:00:48.000Z"
        },
        {
            "Name": "CoreOS-stable-522.3.0",
            "CreationDate": "2014-12-24T23:00:48.000Z"
        },
        {
            "Name": "CoreOS-stable-600.3.0",
            "CreationDate": "2019-12-24T23:00:48.000Z"
        }
    ]
}

我正在尝试获取在其Name中包含"稳定"的最新(CreationDate(图像的Name

我幼稚的尝试是:

jq '.Images[] | select(.Name | contains("stable")) |= sort_by(.CreationDate)' data.json

但是这给了我一个错误,并且只会按CreationDate对它们进行排序(不仅返回最新的(

$ jq -r '.Images | map(select(.Name | index("stable"))) | max_by(.CreationDate).Name' file
CoreOS-stable-600.3.0

由于contains检查一个字符串是否包含在另一个字符串中有点矫枉过正,因此改用index
之所以使用max_by,是因为它避免了排序并生成具有 max 的元素。 CreationDate .

最新更新