내가 입력할 때:
echo "foo bar" | gawk -v var="content" '{print $var}'
출력이 될 것으로 예상합니다 content
. 왜 그럴까요 foo bar
?
답변1
var
변수는 in 이 아닌 $var
in 으로 이름으로 참조됩니다 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}'