명령줄을 통해 awk 변수를 설정하는 두 가지 방법이 있습니까?

명령줄을 통해 awk 변수를 설정하는 두 가지 방법이 있습니까?

awk나는 명령줄에서 awk 변수를 설정하여 할당한 O'Reilly 예제(1997)를 발견했습니다.~ 후에프로그램 텍스트. 작동하지만 이 구문을 찾을 수 없습니다.남자 / 정보가 이상해. 내가 방금 놓쳤던 걸까? 단종됐나요...? 매뉴얼에서 본 유일한 구문은 옵션입니다 -v.

awk '/home/{print foo, bar}' foo="cat" bar="dog" /proc/$$/cmdline

산출:cat dog

답변1

실제로 POSIX에 있습니다.awk(POSIX 2008 링크, 이전 버전에도 있었다고 생각합니다). -v에 설명되어 있습니다.옵션섹션, 다른 방법은피연산자부분.

-v파일 이름과 함께 마지막에 할당을 전달하는 것과 차이점이 있습니다 .

  • 와 함께 -v:

애플리케이션은 할당 인수가 할당 피연산자와 동일한 형식인지 확인해야 합니다. 지정된 변수 할당이 발생합니다.BEGIN 패턴과 관련된 작업을 포함하여 awk 프로그램을 실행하기 전에(만약에 어떠한). 이 옵션은 여러 번 발생하도록 지정할 수 있습니다.

  • 파일 이름과 혼합:

[...] 이러한 각 변수 할당은 발생합니다.다음 파일을 처리하기 직전, 만약에 어떠한. 따라서 첫 번째 파일 인수 이전의 할당은 BEGIN 작업(있는 경우) 후에 실행되고, 마지막 파일 인수 이후의 할당은 END 작업(있는 경우) 이전에 발생합니다. 파일 인수가 없으면 표준 입력을 처리하기 전에 할당이 실행됩니다.

예:

$ cat input 
hello
hello
$ awk -v var=one 'BEGIN{print var} /hello/{print var} END{print var}' \
    var=two input var=three input var=four
one
two
two
three
three
four

답변2

이는 NET에서 외부적으로 변수를 설정하는 오래된 스타일입니다 awk. 모호했기 때문에(파일 이름이 이라면 어떻게 될까요? foo=cat) 이후 버전에서는 -v옵션이 추가되었습니다. 이전 버전과의 호환성을 위해 작동해야 하지만 보장할 수는 없습니다. 앞서 말했듯이 이 -v옵션은 최신 버전이므로 의 모든 버전이 awk이를 지원하는 것은 아닙니다.

관련 정보