[英]How can I add calculated values to exported csv when using JQ?
我有 json 数据,如下所示
{"lastUpdateId":18891938,
"bids":[
["1","50"],
["2","40"],
["3","30"],
["4","20"],
["5","10"]
],
"asks":[
["6","10"],
["7","20"],
["8","30"],
["9","40"],
["10","50"]
]}
那么下面的代码就可以像这样导出CSV的结果了
jq -r keys[] as $k | select(.[$k]|type=="array") | [$k]+.[$k][] | .[length]= (.[-2:]|map(tonumber)|.[0]*.[1]) |@csv
结果:
"asks","6","10",60
"asks","7","20",140
"asks","8","30",240
"asks","9","40",360
"asks","10","50",500
"bids","1","50",50
"bids","2","40",80
"bids","3","30",90
"bids","4","20",80
"bids","5","10",50
如果我想要另一个列来表示所有询价的最小值(这里是 6)?、每个询价和出价的总和,以及每个询价和出价的总和的比率?
所以我想要 CSV 结果是这样的(第 4-6 列是我想要的新列)
asks,6,10,60,6,1300,0.046153846
asks,7,20,140,6,1300,0.107692308
asks,8,30,240,6,1300,0.184615385
asks,9,40,360,6,1300,0.276923077
asks,10,50,500,6,1300,0.384615385
bids,1,50,50,6,350,0.142857143
bids,2,40,80,6,350,0.228571429
bids,3,30,90,6,350,0.257142857
bids,4,20,80,6,350,0.228571429
bids,5,10,50,6,350,0.142857143
6 is minimum value for asks. 1300 is total sum for asks(60,140,240,360,500), 350 is total sum for bids(50,80,90,80,50), and the last values for each line is ratio(4th col/6th col)
首先,一个助手function:
def mul: (.[0]|tonumber) * (.[1]|tonumber);
接下来,我们可以通过首先计算“要求”值的最小值来调整您提到的解决方案:
([.asks[][] | tonumber] | min) as $min
| keys[] as $k
| select(.[$k]|type=="array")
| ([.[$k][] | mul] | add) as $sum
| [$k]+.[$k][]
| (.[-2:]|mul) as $c4
| . + [$c4, $min, $sum, $c4 / $sum]
| @csv
要消除数值的引号,您可以使用tonumber
。 要消除所有引号,您可以通过调用join(",")
替换对@csv
的调用,但结果不能保证是您期望的 CSV。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.