Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash JQ:为什么JSON流中字段的求和数字不包括求和中的第一个数字?_Bash_Stream_Sum_Jq_Reduce - Fatal编程技术网

Bash JQ:为什么JSON流中字段的求和数字不包括求和中的第一个数字?

Bash JQ:为什么JSON流中字段的求和数字不包括求和中的第一个数字?,bash,stream,sum,jq,reduce,Bash,Stream,Sum,Jq,Reduce,我有一张信用卡交易清单。我想对JSON事务流中的金额求和。每个对象包含一个事务的数据。我使用JQ来处理JSON 我提到这个问题: 但是,在实施问题中描述的解决方案之后 jq-n' 将(输入|到_项[])减少为{$key,$value}({};[$key]+=$value) 'input.json 我注意到第一个数字没有包括在加法中。下面查找示例文件、命令输出和预期结果 示例文件CC事务“jqAdditionSample.json” 预期实际总数 手动添加金额以查找总计342.75+492.71

我有一张信用卡交易清单。我想对JSON事务流中的金额求和。每个对象包含一个事务的数据。我使用JQ来处理JSON

我提到这个问题:

但是,在实施问题中描述的解决方案之后

jq-n'
将(输入|到_项[])减少为{$key,$value}({};[$key]+=$value)
'input.json
我注意到第一个数字没有包括在加法中。下面查找示例文件、命令输出和预期结果

示例文件CC事务“jqAdditionSample.json” 预期实际总数 手动添加金额以查找总计342.75+492.71+573=1408.46

运行命令
cat~/Desktop/jqAdditionSample.json|\
jq‘将(输入|减少到_条目[])为{$key,$value}({};[$key]+=$value)’
结果:

{
  "Originating Account Number": "####-####-####-0000####-####-####-0000",
  "Cardholder Name": "NAME ON CARDNAME ON CARD",
  "Merchant Name": "VENDOR NAMEVENDOR NAME",
  "Amount": 1065.71,
  "MCC Description": "Computer SoftwareComputer Software"
}
注不符 输出1065.71将除第一个数字外的所有数字相加。我们可以通过从期望值1408.46中减去342.75进行验证。我想把所有的数字加起来

事实上,总和中不包括来自第一个对象的数据

我需要帮助的地方 有没有办法让JQ对流中某个字段的所有数字求和,我做错了什么吗


在JSON流中,有没有一种更简单的方法可以对我所选择的硬路线中的字段的所有数字求和

问题在于您使用
输入的方式。根据文档,
输入
“逐个输出所有剩余的输入”。很好,但请注意“剩余”部分。运行代码时,第一个输入已经读入
,因此
输入
返回除该记录之外的所有记录。简单的解决方法是使用jq的
-n
选项,它运行一次过滤器,在
中使用
null
值。这样就可以通过
输入读取所有记录,从而使代码正常工作。

问题在于您使用
输入的方式。根据文档,
输入
“逐个输出所有剩余的输入”。很好,但请注意“剩余”部分。运行代码时,第一个输入已经读入
,因此
输入
返回除该记录之外的所有记录。简单的解决方法是使用jq的
-n
选项,它运行一次过滤器,在
中使用
null
值。这使得所有记录都可以通过
输入读取,从而使您的代码正常工作。

您没有在“运行命令”部分使用
-n
,即使您引用的“问题中描述的解决方案”代码中有该记录。如果您不希望第一个条目被使用,这一点很关键。顺便说一句,当您使用反勾号而不是四个空格缩进来格式化代码(或JSON等结构化数据)时,您会破坏堆栈溢出的语法突出显示。引用一行或多行代码或结构化(语法高亮)数据时,请使用代码部分……另一方面,
cat file | jq…
编写得更好,因为
您在“运行命令”部分中没有使用
-n
,即使您引用的“问题中描述的解决方案”代码中也有。如果您不希望第一个条目被使用,这一点很关键。顺便说一句,当您使用反勾号而不是四个空格缩进来格式化代码(或JSON等结构化数据)时,您会破坏堆栈溢出的语法突出显示。在引用一行或多行代码或结构化(语法可高亮显示)数据时,请使用代码部分…另一方面,
cat file | jq…
写得更有趣。我一直使用
-n
从头开始构造JSON对象,但不提供任何输入,这确实是一个疏忽。这很有用,因为它还可以用于运行过滤器的第一次迭代。谢谢,真有趣。我一直使用
-n
从头开始构造JSON对象,但不提供任何输入,这确实是一个疏忽。这很有用,因为它还可以用于运行过滤器的第一次迭代。非常感谢。
{
  "Originating Account Number": "####-####-####-0000####-####-####-0000",
  "Cardholder Name": "NAME ON CARDNAME ON CARD",
  "Merchant Name": "VENDOR NAMEVENDOR NAME",
  "Amount": 1065.71,
  "MCC Description": "Computer SoftwareComputer Software"
}