次のファイルがあります
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