如何在 awk 中使用变量

如何在 awk 中使用变量

我们有以下文件

 cat  /tmp/hive.conf

      "hive-exec-log4j2" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-interactive-env" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-interactive-site" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-log4j" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },
      "hive-log4j2" : {
        "tag" : "TOPOLOGY_RESOLVED",
        "version" : 2
      },

我们想要捕获文件中匹配“hive-log4j”后的行

所以我们得到:

cat  /tmp/hive.conf |  awk  '/"hive-log4j"/{getline; print}'
        "tag" : "TOPOLOGY_RESOLVED",

现在我们想用 awk 做同样的事情并导出变量,如下所示

 val="hive-log4j"
 cat  /tmp/hive.conf |  awk -v var=$val '/"var"/{getline; print}' 

但没有输出

我的语法有什么问题吗?

答案1

/.../是一种正则表达式常量,尝试匹配字符串"var",而不是var的内容。尝试

awk -v var=$val '$0 ~ var {getline; print}' file

或者

awk -v var=$val 'match ($0, var) {getline; print}' file

确保 shell 变量包含双引号,因为它们是模式的一部分。如果那不可能,请尝试

awk -v var=$val 'match ($0, "\"" var "\"") {getline; print}' file

相关内容