변수를 인쇄하려고 하는데 awk가 전체 줄을 인쇄하는 이유는 무엇입니까?

변수를 인쇄하려고 하는데 awk가 전체 줄을 인쇄하는 이유는 무엇입니까?

내가 입력할 때:

echo "foo bar" | gawk -v var="content" '{print $var}'

출력이 될 것으로 예상합니다 content. 왜 그럴까요 foo bar?

답변1

var변수는 in 이 아닌 $varin 으로 이름으로 참조됩니다 awk. 일을$n 가리킨다n 필드: $1첫 번째 필드의 경우, 두 번째 필드의 경우... 또는 == 0 $2의 경우 전체 레코드 입니다( 전체 레코드입니다).n$0

문자 그대로의 숫자일 필요는 없습니다. $(1+1)또는 를 사용할 수 있습니다 $variable. variable포함된 경우 첫 번째 필드가 됩니다 1. $variable일반적으로 사용되는 것은 $NF마지막 필드( NF필드 수를 포함하는 특수 변수)에 대한 것입니다.

귀하의 예와 같이 변수에 숫자가 포함되어 있지 않으면숫자가 아닌0으로 이해됩니다.

따라서 는 var="content"; print $var와 동일 var=0; print $var하므로 와 동일합니다. 즉 print $0, 전체 레코드를 인쇄합니다.

여기서 원하는 것은 다음과 같습니다.

echo "foo bar" | gawk -v var="content" '{print var}'

관련 정보