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

관련 정보