2017-08-07 478 views
0

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
  1. 刪除-s選項。你的輸入已經是一個數組。

  2. 的過濾器的使用方法: -

說明[[3,-4]。]:.[a,b]就像.[a],.[b]。外括號將它變成一個數組。

可以用這種方式指定任意數量的索引,它們的呈現順序將決定結果中項目的順序。

1

如果你想在一個數組來選擇值的範圍,你可以用切片的語法:

<start-index>:<end-index> 

只要記住最後的索引是唯一的(不包括在內),應增加訂單。

因此,要獲得從倒數第三/第四:

.[-4:-2]