我有一个 json 文件并使用 jq 我输出以下内容。
"network": "8.8.8.8/32",
"firewall",
"network": "8.8.8.7/32",
"network": "8.8.8.9/32",
"firewall",
"network": "8.8.8.10/24",
"network": "8.8.8.11/32",
"firewall",
我需要做的只是显示包含防火墙的网络。我想将其输出到 sed 或 awk 以完成此操作,但我运气不佳。
所以基本上如果下面一行不包含防火墙,那么删除一行。
预期输出
"network": "8.8.8.8/32",
"firewall",
"network": "8.8.8.9/32",
"firewall",
"network": "8.8.8.11/32",
"firewall",
我尝试了一些东西但没有运气
cat file.json | jq '.items[].networks[] | {data:[{network:.network,devices:[.configs[].locations[].devices[] | select(.id | contains("firewall")).id]}]} | awk '/network/ {while (/network/ && getline>0) ; next} 1'
我是否必须将其通过管道传输到文件中以使其更容易?
答案 0 :(得分:3)
避免使用 getline()
,使用类似
| awk '/network/ {n=$0} /firewall/ { printf("%s\n%s\n", n, $0)}'