awk从键值对打印值

awk从键值对打印值,awk,sed,Awk,Sed,我在下面介绍了json和使用awk打印并发值,但它并没有给出任何输出 { "GlanceImages.list_images": [ { "runner": { "type": "constant", "times": 10, "concurre

我在下面介绍了json和使用awk打印并发值,但它并没有给出任何输出

{
    "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回答了我第一个问题,但第二个答案取决于具体情况,因为我有多个文件,需要在不同的文件中添加
并发性
值,所以这不起作用,无论如何,这回答了我的疑问。谢谢