TL; DR:给定一个包含一系列密钥对的输入文件,我想选择倒数第3对和倒数第4对。我可以单独获得它们,但如果可能的话我想立刻抓住它们。可以这样做吗?
我的输入文件结构如下;
[
{
"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]'
以获得倒数第3个(并且用4换成倒数第4个)但是它会分别抓住它们。
我从文档中想到jq -s '.[-3;-4]'
会抓住两者但会引发错误。
我可以单独抓住它们并单独处理它们,但是那些草率的代码。是否有更清洁的方法同时抓住两个?
答案 0 :(得分:3)
删除-s选项。您的输入已经是一个数组。
要使用的过滤器:[。[ - 3,-4]]
说明:.[a,b]
与.[a],.[b]
类似。外括号将其转换为数组。
可以用这种方式指定任意数量的索引,并且它们的显示顺序将决定结果中项目的顺序。
答案 1 :(得分:3)
如果要在数组中选择值范围,可以使用切片语法:
<start-index>:<end-index>
请记住,结束索引是独占的(不包括在内),应该是增加顺序。
所以从最后得到第三个/第四个:
.[-4:-2]