jq:选择范围

时间:2017-08-07 13:51:16

标签: arrays json slice jq

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

我可以单独抓住它们并单独处理它们,但是那些草率的代码。是否有更清洁的方法同时抓住两个?

2 个答案:

答案 0 :(得分:3)

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

  2. 要使用的过滤器:[。[ - 3,-4]]

  3. 说明:.[a,b].[a],.[b]类似。外括号将其转换为数组。

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

答案 1 :(得分:3)

如果要在数组中选择值范围,可以使用切片语法:

<start-index>:<end-index>

请记住,结束索引是独占的(不包括在内),应该是增加顺序。

所以从最后得到第三个/第四个:

.[-4:-2]