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

`jq -nR inputs`与`jq -R splits("\n")`的差异及splits失效原因

为什么jq中splits在reduce场景下不如inputs工作正常?

初看之下,jq里的inputs和splits好像能达成相同效果:

$ seq 3 | jq -nR 'inputs|tonumber'
1
2
3
$ seq 3 | jq -R 'splits("\n")|tonumber'
1
2
3

但一旦用reduce做累加操作,两者的差异就立刻显现:inputs能正常算出所有数字的总和:

$ seq 3 | jq -nR 'reduce inputs as $_ (0; . + ($_|tonumber))'
6

而splits却只输出了每个单独的数字,完全没完成累加:

$ seq 3 | jq -R 'reduce splits("\n") as $_ (0; . + ($_|tonumber))'
1
2
3

核心原因:处理粒度与模式逻辑的差异

问题出在jq的-R(原始输入)模式的运行逻辑,以及inputs和splits的作用范围不同:

  • 当使用-nR搭配inputs时,-n参数让jq从null开始执行,inputs会把所有输入的行收集成一个完整的序列,reduce是对整个序列(1、2、3)做累加计算,最终得到总和6。
  • 而单独使用-R搭配splits时,jq会逐行处理每一条输入:每一行(比如"1"、"2"、"3")都会单独触发一次整个jq表达式的执行。对于单一行文本来说,splits("\n")拆不出多个元素,只会返回该行本身,所以reduce每次都是从初始值0开始,加上当前行的数字,最后输出的就是每个单独的计算结果,而非所有数字的总和。

简单总结:inputs是将所有输入视为一个整体序列处理,而splits在-R模式下是对每一行单独进行拆分处理,两者的处理粒度完全不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:05:08