변수를 인쇄하려고 할 때 왜 awk가 전체 줄을 인쇄합니까?


24

입력 할 때 :

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

나는 출력이 될 것으로 기대한다 content. 왜 그렇 foo bar습니까?


8
$
taliezin

과연. 나는 bash 문법과 혼동되었다 ...
nicoco

좋은 질문이며 대답 $은 잘못 배치 되었다는 것을 보여 주지만 오타로 닫혀 있는지 잘 모르겠습니다. 최근에이 중 몇 가지를 보았으므로 아마도 표준적인 것이 필요할 것입니다.
roaima

답변:


45

변수처럼 이름에 의해 참조 var되지, $varawk. $n받는 의미 n 필드 : $1첫 번째 필드에 대해, $2상기 제 ... 또는 전체에 대한 레코드 n== 0 ( $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}'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.