我有一个json文件,其数据量> 20 gb,如下所示:
{
"_id": {
"$serialnumber": "572"
},
"content": "{\"001\":\"77\",\"401\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
"_id": {
"$serialnumber": "573"
},
"content": "{\"001\":\"234\",\"424\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
"_id": {
"$serialnumber": "574"
},
"content": "{\"001\":\"549\",\"432\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
"_id": {
"$serialnumber": "575"
},
"content": "{\"001\":\"888\",\"532\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
我需要一种使用jq流的方法(我已经安装了1.6版)来获取内容中包含4 ..元素的所有001值(400或401或402或403,... )
例如上面的代码将返回:
77
234
549
而不是888,后者不包含任何4 ..元素。
001 77 has the \"401\" element
001 234 has the \"424\" element
001 549 has the \"432\" element
请在下面找到我解决此问题的尝试之一:
jq -cn --stream 'fromstream(1|truncate_stream(inputs | select(.[0][] == "_id") | del(.[0][0]))) | select(.content == "400")'
答案 0 :(得分:0)
由于您的输入已经是流,因此无需使用--stream选项。以下将产生所需的输出:
< input.json jq -r '.content
| fromjson
| select( any(keys_unsorted[]; test("^4")) )
| .["001"]'