从 json 列表中选择具有最高内部版本号的 'name'

Selecting 'name' with highest build number from json list

这是我的示例数据,它是 Oracle 云上存储桶中的对象列表:

{
    "objects": [
        {
            "name": "rhel/"
        },
        {
            "name": "rhel/app-3.9.6.629089.txt"
        },
        {
            "name": "rhel/app-3.11.4.629600.txt"
        }
    ]
}

'/'之前的值部分是文件夹名称,之后是文件名。文件名中的最后一个数字是内部版本号。所需的输出是 rhel 文件夹中内部版本号最高的对象的名称:

$ jq -r 'some_program' file.json 
rhel/app-3.11.4.629600.txt

我可以对数据进行一些处理以排除裸“rhel/”文件夹,如下所示:

$ jq -r '.objects[] | select(.name|test("rhel/."))' file.json
{
  "name": "rhel/app-3.9.6.629089.txt"
}
{
  "name": "rhel/app-3.11.4.629600.txt"
}

当我尝试在 jq 期间拆分它时抛出错误:

$ jq -r '.objects[] | select(.name|test("rhel/.")) | split(".")' file.json
jq: error (at file.json:1): split input and separator must be strings

我期望在拆分结果上使用 'map(tonumber)[-2]' 并将整体包装在 'max_by()' 中。

如何使用 jq 更接近所需的输出?

[.objects[]
 | select(.name|test("rhel/."))]
| max_by(.name|split(".")[-2]|tonumber)

产生:

{
  "name": "rhel/app-3.11.4.629600.txt"
}

如果您只想要名称,您可以先提取它们:

[.objects[].name|select(test("rhel/."))]
| max_by(split(".")[-2]|tonumber)