我有一个对象数组,其中每个对象的结构为:
{
"impl": "pmdk",
"pc_writes": 50,
"threads": 1,
"throughput (K tps)": 703014,
"med_latency (ns)": 1334,
"99_latency (ns)": 2358,
"exec_time (s)": 14224471006
}
我想将每个对象中的"throughput (K tps)"
字段除以1000,并以相同的格式返回数组。我尝试以以下方式使用map_values
:
map_values(."throughput (K tps)"/1000)
但它只返回一个修改后的值数组,如下所示:
[703.014,...]
而不是整个对象,像这样:
[{
"impl": "pmdk",
"pc_writes": 50,
"threads": 1,
"throughput (K tps)": 703.014,
"med_latency (ns)": 1334,
"99_latency (ns)": 2358,
"exec_time (s)": 14224471006
},
...
]
将一个字段除以1000后,如何返回对象数组?
告诉jq
替换"吞吐量(Ktps(";除以1000:
jq '.[]."throughput (K tps)" |= . / 1000' file.json
您可以使用map
或map_values
来解决问题。但您尝试的问题是,您只是修改字段"throughput (K tps)"
以打印到输出中。
如果没有|=
更新赋值运算符,则只有表达式中提到的字段才会打印到控制台。
您可以使用更新分配操作符
map(."throughput (K tps)" |= . / 1000)
但是jq
为您提供了更多的算术更新分配,例如+=
、*=
和/=
,这样您就可以进行
map(."throughput (K tps)" /= 1000)
jq '.[] | ."throughput (K tps)" |= . / 1000'
应将每个throughput (K tps)
除以1000进行编辑。
在线试用!