gpt4 book ai didi

arrays - 如何使用 jq 将数组拆分为多个 block ?

转载 作者:行者123 更新时间:2023-12-04 00:59:44 26 4
gpt4 key购买 nike

我有一个非常大的 JSON 文件,其中包含一个数组。是否可以使用 jq将此数组拆分为几个固定大小的较小数组?假设我的输入是这样的:[1,2,3,4,5,6,7,8,9,10] ,我想把它分成 3 个元素长的块。来自 jq 的期望输出将是:

[1,2,3]
[4,5,6]
[7,8,9]
[10]

实际上,我的输入数组有将近三百万个元素,都是 UUID。

最佳答案

有一个(未记录的)内置函数,_nwise ,满足功能要求:

$ jq -nc '[1,2,3,4,5,6,7,8,9,10] | _nwise(3)'

[1,2,3]
[4,5,6]
[7,8,9]
[10]

还:
$ jq -nc '_nwise([1,2,3,4,5,6,7,8,9,10];3)' 
[1,2,3]
[4,5,6]
[7,8,9]
[10]

顺便说一句, _nwise可用于数组和字符串。

(我认为它没有记录,因为对合适的名称存在一些疑问。)

TCO-版本

不幸的是,内置版本是粗心定义的,对于大型数组不会有很好的表现。这是一个优化版本(它应该与非递归版本一样高效):
def nwise($n):
def _nwise:
if length <= $n then . else .[0:$n] , (.[$n:]|_nwise) end;
_nwise;

对于大小为 300 万的数组,这是非常高效的:
在旧 Mac 上为 3.91 秒,最大驻留大小为 162746368。

请注意,此版本(使用尾调用优化递归)实际上比 nwise/2 的版本更快使用 foreach显示在本页的其他地方。

关于arrays - 如何使用 jq 将数组拆分为多个 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51412721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com