【问题标题】:jq: Select rangejq:选择范围
【发布时间】:2018-01-14 20:38:08
【问题描述】:

TL;DR:给定一个包含一系列密钥对的输入文件,我想选择倒数第三对和倒数第四对。我可以单独获得它们,但如果可能的话,我想同时抓住它们。这个可以吗?

我的输入文件的结构是这样的;

[
 {
  "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 交换倒数第四名),但这会分别获取它们。

我从文档中认为 jq -s '.[-3;-4]' 会同时抓取两者,但会引发错误。

我可以单独获取它们并分别处理它们,但这是草率的代码。有没有更清洁的方法可以同时抓取两者?

【问题讨论】:

    标签: arrays json slice jq


    【解决方案1】:
    1. 删除 -s 选项。您的输入已经是一个数组。

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

    解释:.[a,b] 类似于.[a],.[b]。外面的括号把它变成一个数组。

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

    【讨论】:

      【解决方案2】:

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

      <start-index>:<end-index>
      

      请记住,结束索引是独占的(而不是包含的)并且应该是递增顺序。

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

      .[-4:-2]
      

      【讨论】:

        猜你喜欢
        • 2018-03-08
        • 1970-01-01
        • 1970-01-01
        • 2015-01-17
        • 2017-03-26
        • 2016-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多