다음 파일이 있습니다
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