jq:选择范围

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]'会抓住两者,但会引发错误。

我可以单独抓住他们,分别工作,但这是潦草的代码。是否有一种更简洁的方式来同时抓住两者?

  1. 删除-s选项。你的输入已经是一个数组。

  2. 的过滤器的使用方法: -

说明[[3,-4]。]:.[a,b]就像.[a],.[b]。外括号将它变成一个数组。

可以用这种方式指定任意数量的索引,它们的呈现顺序将决定结果中项目的顺序。

如果你想在一个数组来选择值的范围,你可以用切片的语法:

<start-index>:<end-index> 

只要记住最后的索引是唯一的(不包括在内),应增加订单。

因此,要获得从倒数第三/第四:

.[-4:-2]