awk从键值对打印值
我在下面介绍了json和使用awk打印并发值,但它并没有给出任何输出awk从键值对打印值,awk,sed,Awk,Sed,我在下面介绍了json和使用awk打印并发值,但它并没有给出任何输出 { "GlanceImages.list_images": [ { "runner": { "type": "constant", "times": 10, "concurre
{
"GlanceImages.list_images": [
{
"runner": {
"type": "constant",
"times": 10,
"concurrency": 1
},
"context": {
"users": {
"tenants": 2,
"users_per_tenant": 2
},
"images": {
"image_url": "http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img",
"disk_format": "qcow2",
"container_format": "bare",
"images_per_tenant": 4
}
},
"sla": {
"failure_rate": {
"max": 0
}
}
}
]
}
使用awk
echo xyz.json | awk -F: '$1=="concurrency" {print $2}'
它没有给出任何输出,可能是什么问题。最终,我必须读取多个文件并汇总所有并发性值,最后打印最终的总和另一个脆弱的脚本
$ awk '$1=="\"concurrency\":"{print $2}' file
如果要聚合多个匹配项
$ awk '$1=="\"concurrency\":"{sum+=$2} END{print sum}' file
你为什么不使用像jq这样的JSON解析器呢?我不是jq方面的专家,但我尝试过,它的输出为null
jq.runner.concurrency'xyz.JSON
null
来完成这个问题:正如前面(删除的)答案中提到的,用户无法访问jq
。需要防弹的awk
解决方案。这个问题不是很好的重复吗。我很确信你可以使用python?这很有效,谢谢!!!但我只是想检查一下,是否有更好的方法来编写下面的代码(忽略变量名,这只是一个例子)p=0,而read-r line do var=$(awk'$1==“\”并发\\”:“{print$2}'$line)echo$var p=$($p+$var))echo“p是$p”echo“$line”完成了<“$input”
@SaurabhArora是的,但强烈反对。接受您对所问问题的回答,如果您有问题,请提出新问题。感谢@Karakfa回答了我第一个问题,但第二个答案取决于具体情况,因为我有多个文件,需要在不同的文件中添加并发性
值,所以这不起作用,无论如何,这回答了我的疑问。谢谢