使用 jq 修改对象数组中的相同字段
Modifying the same field in an array of objects using jq
我有一个对象数组,其中每个对象的结构如下:
{
"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,并以相同的格式 return 数组。我尝试按以下方式使用 map_values
:
map_values(."throughput (K tps)"/1000)
但它只是 return 一个修改值数组:
[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
},
...
]
我如何 return 对象数组中的一个字段除以 1000 后?
jq '.[] | ."throughput (K tps)" |= . / 1000'
应将每个 throughput (K tps)
除以 1000 进行编辑。
告诉jq
将“吞吐量(K tps)”中的值除以1000:
jq '.[]."throughput (K tps)" |= . / 1000' file.json
您可以使用 map
或 map_values
来解决您的问题。但是您尝试的问题是您 仅 修改字段 "throughput (K tps)"
以打印到输出中。
没有 |=
更新赋值运算符,只有表达式中提到的字段会打印到控制台。
您可以使用 Update-assignment 运算符
map(."throughput (K tps)" |= . / 1000)
但是 jq
为您提供了 +=
、*=
和 /=
形式的更多工作 Arithmetic update assignments,因此您可以
map(."throughput (K tps)" /= 1000)
我有一个对象数组,其中每个对象的结构如下:
{
"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,并以相同的格式 return 数组。我尝试按以下方式使用 map_values
:
map_values(."throughput (K tps)"/1000)
但它只是 return 一个修改值数组:
[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
},
...
]
我如何 return 对象数组中的一个字段除以 1000 后?
jq '.[] | ."throughput (K tps)" |= . / 1000'
应将每个 throughput (K tps)
除以 1000 进行编辑。
告诉jq
将“吞吐量(K tps)”中的值除以1000:
jq '.[]."throughput (K tps)" |= . / 1000' file.json
您可以使用 map
或 map_values
来解决您的问题。但是您尝试的问题是您 仅 修改字段 "throughput (K tps)"
以打印到输出中。
没有 |=
更新赋值运算符,只有表达式中提到的字段会打印到控制台。
您可以使用 Update-assignment 运算符
map(."throughput (K tps)" |= . / 1000)
但是 jq
为您提供了 +=
、*=
和 /=
形式的更多工作 Arithmetic update assignments,因此您可以
map(."throughput (K tps)" /= 1000)