You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jq中不加载全部数据到内存实现流数据归约为单结果?

流式归约jq输入的正确语法

你遇到的问题核心是:不带--slurp时,reduce . as $i (...)会针对每一行输入单独执行一次归约,所以每行输入都会从初始值0开始累加,结果自然就是每个数字本身。要实现流式的归约(不加载全部输入到内存),需要用jq的-n(null输入模式)结合inputs关键字来处理所有输入行:

正确命令

seq 5 | jq -n 'reduce inputs as $i (0; . + ($i | tonumber))'

执行结果

15

原理说明

  • -n参数让jq从null开始处理,不会自动读取第一行输入作为初始值
  • inputs会逐个读取所有输入行(流式处理,不需要一次性加载到内存)
  • 整个reduce逻辑会在所有输入行上执行一次,从初始值0开始累加每一行的数字,最终输出总和

内容的提问来源于stack exchange,提问作者Martin Mucha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:30:47