2016-11-24 91 views
0

目前這個工程:JQ - 選擇包含數組或/和

jq -r '.[] | select(.hosts | contains('$array')).hostName') 

如果array = ["darwin","intel"]它返回一個包含兩個達爾文「和」英特爾的對象。 如何讓它返回包含達爾文的對象「和/或」英特爾?

回答

1

假設你的JQ有any/2,我推薦使用的intersectq/2定義如下:

def intersectq(a;b): any(a[]; . as $x | any(b[]; . == $x)); 

過濾器使用,然後簡單地說:

.[] | select(intersectq(.hosts; $array)) | .hostName 

爲:

jq --argjson array '["darwin","intel"]' -r -f program.jq hosts.json 
+0

謝謝,這工作!現在我需要弄清楚爲什麼 – pkpowell