1행: if 또는 그 근처에서 구문 오류가 발생했습니다.

1행: if 또는 그 근처에서 구문 오류가 발생했습니다.

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에서는 다음을 사용하여 표준에 가까워 지고 싶습니다.ARGVFILENAME/usr/xpg4/bin/awkawkmawk전통적인 버전awk그리고 구문이 실제로 지원됩니다.

이제 이것은 system()실제로 명령줄을 sh해석하기 위해 쉘을 호출하므로 모든 작업을 다음에서 수행하는 것이 좋습니다( 금세기에 해야 할 것보다 훨씬 낫습니다).cat fileshcsh

#! /bin/sh -
if [ "$1" = x ]; then
  cat file
fi

¹, 또한 !로 시작하는 일부 매개변수는 옵션으로 처리 -됩니다 awk. GNU에서는 she-bang을 사용하여 이 문제를 해결할 awk수 있습니다 .#! /usr/bin/gawk -E

관련 정보