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

シェル変数はパターンの一部であるため、二重引用符が含まれていることを確認してください。それが不可能な場合は試してください。

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

おすすめ記事