如何使用jq筛选列表中未选择的项目?

itch

在jq中,我可以相当容易地列表中选择一个项目

$ echo '["a","b","c","d","e"]' | jq '.[] | select(. == ("a","c"))'

或者,如果您希望将其作为数组获取:

$ echo '["a","b","c","d","e"]' | jq 'map(select(. == ("a","c")))'

但是,如何选择不在列表中的所有项目当然. != ("a","c")不起作用:

$ echo '["a","b","c","d","e"]' | jq 'map(select(. != ("a","c")))'
[
  "a",
  "b",
  "b",
  "c",
  "d",
  "d",
  "e",
  "e"
]

以上为每个项目提供了两次,除了"a""c

相同于:

$ echo '["a","b","c","d","e"]' | jq '.[] | select(. != ("a","c"))'
"a"
"b"
"b"
"c"
"d"
"d"
"e"
"e"

如何过滤匹配项?

最简单,最可靠的(wrt jq版本)方法是使用内置的-

$ echo '["a","b","c","d","e"]' | jq -c '. - ["a","c"]'
["b","d","e"]

如果黑名单非常长,并且到处都是重复项,那么删除它们(例如使用unique可能是适当的

变化

这个问题也可以用解决(在JQ 1.4及以上)indexnot,如

["a","c"] as $blacklist
| .[] | select( . as $in | $blacklist | index($in) | not) 

或者,从命令行传递一个变量(jq --argjson黑名单...):

.[] | select( . as $in | $blacklist | index($in) | not) 

要保留列表结构,可以使用map( select( ...) )

在jq 1.5或更高版本中,您也可以使用anyall,例如

def except(blacklist):
  map( select( . as $in | blacklist | all(. != $in) ) );

特殊情况:字符串

参见例如,基于jq中的多个值选择条目

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

jq筛选器:如果项目不在列表中,则确定

如何选择列表中的项目?

使用 OData 筛选器查询从使用 Microsoft Flow 的 Sharepoint 列表中获取过期日期的未清项目

如何根据数组中的值选择JQ中的项目

如何使用jq筛选JSON对象以仅选择特定键/值?

如何使用jq筛选缺少的内键

如何筛选列并为列表选择条件

如何使用python从列表中选择特定项目并保存在新列表中

禁用列表中未选择的项目选择5个项目后

如何使用on select方法使用Angular填充另一个选择中的项目列表

如何使用Python Selenium单击未签名列表中的项目

如何使用对 SharePoint 列表的 pnp.sp.web REST 调用筛选检索到的项目

如何使用Javascript筛选无序列表以仅显示所选项目?

如何从Netlogo中未排序的列表中删除几个项目

如何使用jQuery在下拉列表中接收最终选择的项目

如何识别项目选择/单击导航抽屉列表,而不是使用其在android中的位置?

如何选择与R中列表中的项目相等的行?

在 flutter / Dart 中:如何随机选择列表中的多个项目?

如何使用jq将项目映射到json结构中?

如何使用jq更新json文件中的子项目?

如何根据其他列表中的项目匹配选择子列表中的外部项目?

如何从列表中随机选择一个项目?

如何从列表中随机选择一个项目?

如何在列表框中投射选择的项目

如何从Javascript列表中随机选择一个项目

如何重新选择列表框中的项目?

我如何告诉 ajax 选择从列表中单击的项目

如何从字典中的随机列表中选择随机项目

如何随机选择列表框中的所有项目?