使用 jq 从其他数组派生数组(参见 Python 列表推导)
Deriving an array from other arrays with jq (cf. Python list comprehensions)
假设以下 json 包含两个数组:
{"zones":["dev01","dev02","dev03","dev04","dev05","dev06","dev07","dev08","dev09","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"],"disabled_zones":["dev01","dev05","dev06","dev08","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]}
我希望导出第三个数组,其中包含出现在第一个数组中但不在第二个数组中的项目:
{"enabled_zones":["dev02","dev03","dev04","dev07","dev09"]}
我想用 jq
来完成这个任务
在 python 中,我将使用列表理解来实现此目的:
>>> zones = ["dev01","dev02","dev03","dev04","dev05","dev06","dev07","dev08","dev09","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]
>>> disabled_zones = ["dev01","dev05","dev06","dev08","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]
>>> enabled_zones = [x for x in zones if x not in disabled_zones]
>>> print(enabled_zones)
['dev02', 'dev03', 'dev04', 'dev07', 'dev09']
我目前正在尝试使用 foreach
遍历 array1 中的项目,并使用 in
检查它们是否存在于 array2 中,但我在语法上遇到困难。
如何使用 jq
实现此目的?
来自 jq manual :
As well as normal arithmetic subtraction on numbers, the - operator
can be used on arrays to remove all occurrences of the second array’s
elements from the first array.
这样就可以了:
jq '{ "enabled_zones": (.zones - .disabled_zones) }' data.json
假设以下 json 包含两个数组:
{"zones":["dev01","dev02","dev03","dev04","dev05","dev06","dev07","dev08","dev09","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"],"disabled_zones":["dev01","dev05","dev06","dev08","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]}
我希望导出第三个数组,其中包含出现在第一个数组中但不在第二个数组中的项目:
{"enabled_zones":["dev02","dev03","dev04","dev07","dev09"]}
我想用 jq
来完成这个任务
在 python 中,我将使用列表理解来实现此目的:
>>> zones = ["dev01","dev02","dev03","dev04","dev05","dev06","dev07","dev08","dev09","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]
>>> disabled_zones = ["dev01","dev05","dev06","dev08","dev10","dev11","dev12","dev13","dev14","dev15","dev16","dev17","dev18","dev19","dev20"]
>>> enabled_zones = [x for x in zones if x not in disabled_zones]
>>> print(enabled_zones)
['dev02', 'dev03', 'dev04', 'dev07', 'dev09']
我目前正在尝试使用 foreach
遍历 array1 中的项目,并使用 in
检查它们是否存在于 array2 中,但我在语法上遇到困难。
如何使用 jq
实现此目的?
来自 jq manual :
As well as normal arithmetic subtraction on numbers, the - operator can be used on arrays to remove all occurrences of the second array’s elements from the first array.
这样就可以了:
jq '{ "enabled_zones": (.zones - .disabled_zones) }' data.json