AWK 명령 실행 시 값을 할당하는 방법

AWK 명령 실행 시 값을 할당하는 방법

필드 값에서 줄 바꿈을 제거하려면 다음 명령을 사용하고 있습니다. 이 예제 명령은 3가지 속성이 있는 파일에 대해 생성되었습니다.

awk -F\| '{while(NF<3 && getline p)$0=$0 p}1'

내 입력 파일의 속성 개수가 다르기 때문에 AWK 명령에서 속성 값 개수를 매개변수화하고 싶습니다. 다음을 시도했지만 오류가 발생했습니다.

NoAttributes=12
awk -F\| '{while(NF<$NoAttributes && getline p)$0=$0 p}1'

오류 정보:

awk: 필드가 잘못되었습니다.

줄번호 1을 입력하세요.

소스 줄 번호는 1입니다.

답변1

awk명령줄에서 변수를 설정하려면 다음을 사용하세요 -v variable=value.

awk -v attrs=2 '{ ... NF < attrs && ... }'

ENVIRON["variable"]다음을 사용하여 환경 변수에 액세스 할 수도 있습니다 awk.

export attrs=2
awk '{ ... NF < ENVIRON["attrs"] && ... }'

또는,

attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'

또는,

env attrs=2 awk '{ ... NF < ENVIRON["attrs"] && ... }'

마지막 두 변형은 attrs호출 환경에 설정 되지 않고 awk프로그램(및 시작할 수 있는 모든 프로세스)에 대해서만 설정됩니다.

세 번째 방법은 variable=value"filename" 인수로 제공됩니다:

awk '...' msg="hello" file1 file2 msg="good bye" file3 file4

파일 처리를 시작하기 전에 awk변수를 문자열로 설정합니다 msg. 값이 처리하도록 변경될 때까지 값을 유지합니다. 이 방식으로 설정된 변수는 코드의 어떤 블록에서도 사용할 수 없습니다.hellofile1good byefile3BEGINawk

awk코드를 구성하는 문자열의 변수 확장을 통해 쉘 변수를 코드에 직접 삽입하는 것은 awk데이터를 프로그램으로 전송하는 좋은 방법이 아니므로 피해야 합니다.

관련 정보