我在 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/awk
Solaris,那么这是无法完成的,因为它们没有ARGV
也不能引用它们的参数(除了将FILENAME
它们的参数作为输入文件处理时) 。在 Solaris 上,您希望使用/usr/xpg4/bin/awk
来获得接近标准awk
.错误消息的措辞表明您正在使用mawk
尽管这通常不是人们所说的传统版本的awk
并且确实支持该语法。
现在,请注意,这system()
实际上会sh
调用解释该cat file
shell 命令行,因此您不妨在中完成整个操作(这比本世纪不应该使用的要sh
好得多):csh
#! /bin/sh -
if [ "$1" = x ]; then
cat file
fi
¹,此外,一些以 开头的参数-
将被awk
!视为选项。使用 GNU awk
,您可以使用#! /usr/bin/gawk -E
she-bang 来解决这个问题。