【问题标题】:How can I add calculated values to exported csv when using JQ?使用 JQ 时如何将计算值添加到导出的 csv?
【发布时间】:2021-04-17 16:26:16
【问题描述】:

我有下面这样的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)

https://jqplay.org/s/2Qsdopx8A4

【问题讨论】:

  • 鉴于您之前在本系列中提出的问题(最近是 stackoverflow.com/questions/67137631/…),请允许我建议,由于 SO 不是免费的编码服务,如果您表明您正在制作通过展示您在之前发布的答案之外的尝试来解决您的问题。

标签: json export-to-csv jq reduce


【解决方案1】:

首先,一个辅助函数:

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。要消除所有引号,您可以将调用 @csv 替换为调用 join(","),但结果不能保证是您期望的 CSV。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-26
    • 2015-07-12
    • 1970-01-01
    • 2020-09-23
    • 2022-01-23
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多