명령줄을 통해 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

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

관련 정보