treat.awk의 내 코드는 다음과 같습니다.
#!/usr/bin/awk -f
if($1 == "x") cat file
명령 프롬프트에 대한 내 입력은 다음과 같습니다.
~/home/treat.awk x
다음과 같은 오류 메시지가 나타납니다.
line 1: syntax error at or near if
어떻게 고치나요? 이 코드에서는 awk를 사용하고 있으며 기존 버전의 awk만 허용됩니다.
파일에는 "시험".
답변1
그건 awk
코드 가 아니라 csh
코드입니다. 셔뱅으로 바꿔봐
#! /bin/csh -f
if($1 == "x") cat file
(이것은 -f
에서와 같이 파일을 매개변수로 사용하지 않지만 awk
사용자의 를 읽지 않습니다 ~/.cshrc
.)
동일한 작업을 수행하는 코드는 awk
다음과 같습니다.
#! /usr/bin/awk -f
BEGIN {
if (ARGV[1] == "x") exit(system("cat file"))
}
통과되면awk의 전통적인 버전, Solaris와 같은 1985년 이전 비 POSIX 버전을 의미하는 경우 매개변수를 참조 /bin/awk
하지 않고 참조할 수 없기 때문에 이 작업을 수행할 수 없습니다 ( 매개변수를 입력 파일로 처리하는 경우 제외). Solaris에서는 다음을 사용하여 표준에 가까워 지고 싶습니다.ARGV
FILENAME
/usr/xpg4/bin/awk
awk
mawk
전통적인 버전awk
그리고 구문이 실제로 지원됩니다.
이제 이것은 system()
실제로 명령줄을 sh
해석하기 위해 쉘을 호출하므로 모든 작업을 다음에서 수행하는 것이 좋습니다( 금세기에 해야 할 것보다 훨씬 낫습니다).cat file
sh
csh
#! /bin/sh -
if [ "$1" = x ]; then
cat file
fi
¹, 또한 !로 시작하는 일부 매개변수는 옵션으로 처리 -
됩니다 awk
. GNU에서는 she-bang을 사용하여 이 문제를 해결할 awk
수 있습니다 .#! /usr/bin/gawk -E