중복 가능성:
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 awk
4.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