awk의 외부 변수

awk의 외부 변수

중복 가능성:
awk에서 스크립트 매개변수 사용

스크립트 조각이 있는 스크립트가 있습니다.

x=3
awk '$2=$x{print $1}' infile

외부 변수는 x이고,

하지만 awk에서는 오류가 발생합니다.

그렇다면 이 경우 awk를 성공적으로 실행하려면 어떻게 해야 할까요?

감사해요!

답변1

쉘 변수는 다음과 같습니다:껍데기바꾸다. 그것을변수에는 다음과 같은 구문이 필요합니다.

awk -v x="$x" '$2 == x {print $1}' infile

또는

awk '$2 == x {print $1}' x="$x" infile

그러나 문제가 발생합니다. 이스케이프 시퀀스가 ​​확장됩니다(그리고 GNU awk4.2 이상 에서는$x로 시작 @/하고 끝나는 경우 /정규식 유형의 변수로 처리됩니다.).

예를 들어 쉘 변수에 두 문자가 포함되어 있는 경우백슬래시그리고N, awk 변수에는 결국 다음이 포함됩니다.새로운 팀문자(gawk 4.2+의 경우 가 포함되어 있으면 @/foo/awk 변수는 를 포함 foo하고 유형이 됩니다 regexp).

또 다른 방법(하지만 POSIX awk 또는 nawk가 필요함(아직 이상한 Unices에 있는 원래 awk와 반대))은 환경 변수를 사용하는 것입니다.

x="$x" awk '$2 == ENVIRON["x"] {print $1}' infile

또 다른 방법(여전히 최신 awk 사용)은 awk에서 ARGV 배열을 사용하는 것입니다.

awk 'BEGIN {x = ARGV[1]; delete ARGV[1]}
  $2 == x {print $1}' "$x" infile

답변2

외부 변수를 직접 사용할 수 없으므로 awk먼저 awk변수로 가져와야 합니다.

x=3
awk -v foo="$x" '$2=foo{print $1}' infile

관련 정보