필드 값에서 줄 바꿈을 제거하려면 다음 명령을 사용하고 있습니다. 이 예제 명령은 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
. 값이 처리하도록 변경될 때까지 값을 유지합니다. 이 방식으로 설정된 변수는 코드의 어떤 블록에서도 사용할 수 없습니다.hello
file1
good bye
file3
BEGIN
awk
awk
코드를 구성하는 문자열의 변수 확장을 통해 쉘 변수를 코드에 직접 삽입하는 것은 awk
데이터를 프로그램으로 전송하는 좋은 방법이 아니므로 피해야 합니다.