Json 为jq命令提供一个非常大的参数,以过滤键

Json 为jq命令提供一个非常大的参数,以过滤键,json,bash,shell,parsing,jq,Json,Bash,Shell,Parsing,Jq,我正在尝试解析一个非常大的文件,它由JSON对象组成,如下所示: {"id": "100000002", "title": "some_title", "year": 1988} 现在我还有一个非常大的ID列表,我想从文件中提取,如果它们存在的话 现在我知道我可以做到这一点: jq '[ .[map(.id)|indices("1", "2")[]] ]' 0.txt > p0.json 这将产生我想要的结果,即仅使用具有“id”1和“2”的对象填充p0.json。现在问题来了:我的

我正在尝试解析一个非常大的文件,它由JSON对象组成,如下所示:

{"id": "100000002", "title": "some_title",  "year": 1988}
现在我还有一个非常大的ID列表,我想从文件中提取,如果它们存在的话

现在我知道我可以做到这一点:

jq '[ .[map(.id)|indices("1", "2")[]] ]' 0.txt > p0.json
这将产生我想要的结果,即仅使用具有“id”1和“2”的对象填充p0.json。现在问题来了:我的id列表也很长(10万左右)。所以我有一个Python程序,它输出相关的id。我的思路是,首先将其分配给一个变量:

 REL_IDS=`echo python3 rel_ids.py`
然后做:

jq --arg ids "$REL_IDS" '[ .[map(.id)|indices($ids)[]] ]' 0.txt > p0.json
我试过使用括号
[$id]
和不使用括号,但到目前为止运气都不好

我的问题是,考虑到过滤器的大量参数,我将如何将它们放入我的jq命令中


提前多谢

由于ID列表很长,诀窍是不要使用
--arg
。然而,细节将取决于“长ID列表”的细节

不过,一般来说,您希望将ID列表作为一个文件呈现给jq,以便可以使用
--rawfile
--slurpfile
或类似的方法


如果出于某种原因,您不想处理实际的文件,那么只要shell允许,您可以将这些面向文件的选项用于进程替换:
Hi@peak,谢谢您的回复。我绝对可以提供一个文件:我有一个txt文件,其中包含以下形式的所有id
head-c 100 ids.txt
-->“1”、“2”、“3”、“4”。。。因此,如果我理解正确,如果我将使用
--rawfile rel\u ids.txt
,那么它可以像index语法中的
索引($rel\u ids)
一样访问?
"1"
"2"
"3"
< objects.json jq -c -n --slurpfile ids ids.json '
  inputs | . as $in | select( $ids | index($in.id))'