셸 변수는 다음과 같습니다. 쉘 변수 . awk 변수로 바꾸려면 다음과 같은 구문이 필요합니다.
awk -v x="$x" "$2 == x {print $1}" infile
또는
awk "$2 == x {print $1}" x="$x" infile
하지만 문제가 있습니다. 이스케이프 시퀀스가 확장됩니다 (GNU awk
4.2 이상에서는 $x
가 @/
로 시작하고 /
는 정규식 변수 유형 으로 처리됩니다.
예를 들어 쉘 변수에 백 슬래시 및 두 문자가 포함 된 경우 n , awk 변수는 newline 문자를 포함하게됩니다 (그리고 gawk 4.2+에서 @/foo/
가 포함 된 경우 awk 변수는 foo
를 포함하고 regexp
유형이어야합니다.
다른 접근 방식 (하지만 POSIX awk 또는 nawk ( 몇 가지 이상한 Unices에서 여전히 발견되는 원래 awk와는 반대로)) 환경 변수를 사용하는 것입니다.
또 다른 접근 방식 (아직 최신 awk 사용)은 awk에서 ARGV 배열을 사용하는 것입니다.
awk "BEGIN {x = ARGV[1]; delete ARGV[1]} $2 == x {print $1}" "$x" infile
댓글
awk
직접, 먼저 awk
변수로 가져와야합니다.
x=3 awk -v foo="$x" "$2=foo{print $1}" infile