다음과 같이 .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"
}