使用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'
。
假设json在一个名为data.json:的文件中
cat data.json | jq .[].rank | sort -n -r | head -n 1