我想在一个50 GB的文件上使用jq。不用说,机器的内存无法处理它。它的内存快用完了。
我尝试了几个选项,包括--stream,但是没有用。有人能告诉我我做错了什么吗?以及如何修复它
jq -cn --stream 'fromstream(1|truncate_stream(inputs))' file.json | jq -cr .data[] >> out.json
该文件包含如下数据:
{"data":[{"id":"id1","value":"value1"},{"id":"id2","value":"value2"},{"id":"id3","value":"value3"}...]}
我想读取数据字段中数组的每个值并将其逐行放入另一个文件中.如下面所示
{"id":"id1","value":"value1"}
{"id":"id2","value":"value2"}
{"id":"id3","value":"value3"}
现在,该命令内存不足并被删除。
3条答案
按热度按时间mhd8tkvw1#
假设您的大文件包含大量关于json对象的内容,您可以逐个处理它们并提取字段
.data[]
。这样,内存消耗受输入中最大json大小的限制,而不是受所有json输入大小之和的限制。
或者您的问题是 * 单个 * json对象太大,以至于内存不足?
结果
rvpgvaaj2#
对于您的示例,以下内容就足够了:
如果您只想逐项列出.data数组,请将上面的
inputs
替换为:需要说明的是,您也可以以完全相同的方式使用gojq(jq的Go实现)。
n3ipq98p3#
还有什么工具可以完成这项工作?
jm是我为“JSON Machine”编写的一个命令行 Package 器,它非常容易使用,而且通常比jq的流解析器更经济。
或者类似地,在同一个存储库中使用基于Python的脚本:
假设只有一个顶级键,则在此特定情况下的另一种选择是: