Выбор и фильтрация последнего элемента в массиве - PullRequest
1 голос
/ 23 апреля 2019

У меня есть следующие образцы данных:

{
    "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) изображения, которое содержит "stable" в Name.

Моя наивная попытка:

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

Однако, это дает мне ошибку и сортирует их только по CreationDate (не только возвращает самую последнюю)

1 Ответ

2 голосов
/ 23 апреля 2019
$ jq -r '.Images | map(select(.Name | index("stable"))) | max_by(.CreationDate).Name' file
CoreOS-stable-600.3.0

, поскольку contains немного излишне проверяет строку на предмет ее содержания в другой строке, вместо нее используется index.
max_by используется потому, что избегает сортировки и возвращает элемент с макс. CreationDate.

...