jq:选择范围
问题描述:
TL; DR:给定一个包含一系列关键字的输入文件,我想选择倒数第三和倒数第四对。我可以单独获得它们,但如果可能的话,我希望一次抓住它们。这可以做到吗?jq:选择范围
我的输入文件是这样构造的;
[
{
"foo": "bar",
"foo2": "bar2"
},
{
"foo3": "bar3",
"foo4": "bar4"
},
{
"foo5": "bar5",
"foo6": "bar6"
},
{
"foo7": "bar7",
"foo8": "bar8"
},
{
"foo9": "bar9",
"foo10": "bar10"
}
]
而且我的输出应该是
[
{
"foo3": "bar3",
"foo4": "bar4"
},
{
"foo5": "bar5",
"foo6": "bar6"
}
]
我知道我可以做jq -s '.[-3]'
来取得第三个到最后(和交换有4对第4到最后),但是,抓住他们分开。
我从文档中认为jq -s '.[-3;-4]'
会抓住两者,但会引发错误。
我可以单独抓住他们,分别工作,但这是潦草的代码。是否有一种更简洁的方式来同时抓住两者?
答
删除-s选项。你的输入已经是一个数组。
的过滤器的使用方法: -
说明[[3,-4]。]:.[a,b]
就像.[a],.[b]
。外括号将它变成一个数组。
可以用这种方式指定任意数量的索引,它们的呈现顺序将决定结果中项目的顺序。
答
如果你想在一个数组来选择值的范围,你可以用切片的语法:
<start-index>:<end-index>
只要记住最后的索引是唯一的(不包括在内),应增加订单。
因此,要获得从倒数第三/第四:
.[-4:-2]