我想根据日期和帐户汇总文件每一行上的json。可能有多个记录具有相同的日期和帐户,我们必须基于date和account_no汇总计数。
示例文件:
{"date":"2019-04-01","count":0,"account_no":"1591"}
{"date":"2019-04-01","count":1,"account_no":"1592"}
请提出一些解决方案。 文件中的json数几乎为2.5cr
答案 0 :(得分:1)
使用inputs
进行jq是个好方法。
首先,这是一个面向流的通用sigma_by
函数:
# In this formulation, f must either always evaluate to a string or
# always to an integer, it being understood that negative integers
# might be problematic
def sigma_by(s; f; g):
reduce s as $x (null; .[$x|f] += ($x|g));
然后可以通过以下方法实现解决方案:
sigma_by(inputs; "\(.date):\(.account_no)"; .count)
使用了-n命令行选项。
使用示例输入,输出将是:
{
"2019-04-01:1591": 0,
"2019-04-01:1592": 1
}
不用说,有很多可能的变化。特别是,可以保证使用字典的sigma_by
变体,例如以节省空间,并避免潜在的解析问题来恢复两个“ agregation by”字符串:
def sigma_by(s; a; b; g):
reduce s as $x (null; .[$x|a][$x|b] += ($x|g));
sigma_by(inputs; .date; .account_no; .count)
请注意,jq的内置“ group_by”对于大型数组具有明显的潜在缺点:它使用排序算法。