Bash: 매개변수를 사용하여 awk에 대한 .bashrc에 별칭을 만드는 방법

Bash: 매개변수를 사용하여 awk에 대한 .bashrc에 별칭을 만드는 방법

다음과 같이 .bashrc 파일에 별칭을 추가하려고 합니다.

...
alias cutf="_cutf"
...
_cutf() {
   awk 'NR >= $2 && NR <= $3 { print }' < $1
}

(이 함수의 목적은 $1 파일에서 $2와 $3 사이에 번호가 매겨진 줄의 내용을 표시하는 것입니다.)

새 bash 세션에서 cutf를 호출하면 출력이 나오지 않습니다.

내가 뭐 놓친 거 없니?

답변1

$2와 $3은 작은따옴표로 묶여 있습니다. 쉘은 작은따옴표로 묶인 변수를 확장하지 않으므로 awk에서 큰따옴표로 전환됩니다.

awk "NR >= $2 && NR <= $3 { print }" < "$1"

다음을 사용하여 동일한 결과를 얻을 수 있습니다.

sed -n 'X,Yp' file

여기서 X와 Y는 줄 번호이거나 Perl에서도 이와 유사합니다.

perl -ne 'print if X .. Y' file

둘 다 짧으며 아마도 해당 기능이 필요하지 않을 것입니다.

답변2

awk 문에서 쉘이 변수를 확장하도록 해서는 안 됩니다. $2 및 $3과 같은 변수는 awk에서 특별한 의미를 갖습니다.

_cutf() {
   awk -v start="$2" -v stop="$3" 'NR >= start && NR <= stop { print }' "$1"
}

아니면 이렇게 쓰셔도 됩니다

_cutf() {
   awk 'NR >= start && NR <= stop { print }' start="$2" stop="$3" "$1"
}

관련 정보