如果下一行不包含文本,则删除行

时间:2021-04-21 22:00:25

标签: if-statement awk

我有一个 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'

我是否必须将其通过管道传输到文件中以使其更容易?

1 个答案:

答案 0 :(得分:3)

避免使用 getline(),使用类似

| awk '/network/ {n=$0} /firewall/ { printf("%s\n%s\n", n, $0)}'