第 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代码。将 she-bang 更改为

#! /bin/csh -f
if($1 == "x") cat file

(这-f不是像 in 一样将文件作为参数awk,而是不读取用户的~/.cshrc

执行相同操作的代码awk类似于:

#! /usr/bin/awk -f
BEGIN {
  if (ARGV[1] == "x") exit(system("cat file"))
}

如果通过awk 的传统版本,你的意思是 1985 年之前的非 POSIX 版本,例如/bin/awkSolaris,那么这是无法完成的,因为它们没有ARGV也不能引用它们的参数(除了将FILENAME它们的参数作为输入文件处理时) 。在 Solaris 上,您希望使用/usr/xpg4/bin/awk来获得接近标准awk.错误消息的措辞表明您正在使用mawk尽管这通常不是人们所说的传统版本的awk并且确实支持该语法。

现在,请注意,这system()实际上会sh调用解释该cat fileshell 命令行,因此您不妨在中完成整个操作(这比本世纪不应该使用的要sh好得多):csh

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

¹,此外,一些以 开头的参数-将被awk!视为选项。使用 GNU awk,您可以使用#! /usr/bin/gawk -Eshe-bang 来解决这个问题。

相关内容