使用shell脚本从json数组中提取最大值
使用 jq,我从数据源中提取了一个 json 数组,如下所示:
[
{
"rank": 69,
"name": "Luigi"
},
{
"rank": 420,
"name": "Peach"
},
{
"rank": 666,
"name": "Toad"
},
{
"rank": 42,
"name": "Mario"
}
]
是否有一种优雅的方法可以在 shell 脚本中提取数组中字段的最大值?在这个例子中,我试图得到“666”。我可以编写一个专门的程序来轻松地做到这一点,但我更愿意留在单个 shell 脚本中,除非这样做太难看。我在 Ubuntu Docker 容器的上下文中,可以根据需要安装其他软件包。
回答
使用jq,您可以使用max_by功能:
max_by(.rank) 将产生:
{
"rank": 666,
"name": "Toad"
}
然后可以通过管道传输结果以从中提取rank:(max_by(.rank)|.rank给出666)。通过在终端前面加上jq– 来运行此查询jq 'max_by(.rank)|.rank'。