2012-05-28 1 views
1

다음 쉘 스크립트 코드가 있습니다. 여기서 NR==$igawk 문에 사용하면 작동하지 않으며, 단순히 NR==1 (또는 다른 정수 값)을 사용하면 완벽하게 작동합니다.

for ((i=1;i<=5;i++)) 
do 
    gawk 'NR==$i{//some action}' input.txt 
done 

아무에게도 문제가 무엇인지 알려 주실 수 있습니까?

답변

4

문제는 awk 스크립트 주위에 작은 따옴표가 bash 문자열 내부에 대체하지 않고, gawk합니다 (gawk 스크립트에서 초기화되지 i 이후 $0과 동일 함) 그대로 $i를 볼 수 있다는 것을 의미한다는 것이다.

이 시간, 대신 큰 따옴표를 사용 : 일반적으로

for ((i=1;i<=5;i++)) 
do 
    gawk "NR==$i{//some action}" input.txt 
done 

, 아마 더 좋을 것이다 명시 적으로 변수를 전달하는 :

for ((i=1;i<=5;i++)) 
do 
    gawk -v i=$i 'NR==i{//some action}' input.txt 
done 
2

그 문제는 당신이 간단한 사용하는 것입니다 따옴표 (')를 gawk 스크립트와 함께 사용하면 bash의 값이 $i으로 바뀌지 않으므로 대신 큰 따옴표 (")를 사용해보십시오.

관련 문제