我们有以下文件
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