为什么命令只在gawk中起作用?

为什么命令只在gawk中起作用?,awk,gawk,nawk,opensolaris,omnios,Awk,Gawk,Nawk,Opensolaris,Omnios,我有两台主机:一台运行Linux,另一台运行OmniOS Linux上的awk令人目瞪口呆: 运行以下命令即可: [root@localhost ~]# awk 'function print_name_and_age(name, age) { print name" is "age" old" } {print_name_and_age($1, $2)}' Mark 12 Mark is 12 old 我认为OmniOS上的awk很蠢,但不确定: root@localhost:/root#

我有两台主机:一台运行Linux,另一台运行OmniOS

Linux上的awk令人目瞪口呆:

运行以下命令即可:

[root@localhost  ~]# awk 'function print_name_and_age(name, age) { print name" is "age" old" } {print_name_and_age($1, $2)}'
Mark 12
Mark is 12 old
我认为OmniOS上的awk很蠢,但不确定:

root@localhost:/root# which awk
/usr/bin/awk
root@localhost:/root# ls -lt /usr/bin/awk
-r-xr-xr-x   2 root     bin        90664 Apr  3 01:17 /usr/bin/awk
root@localhost:/root# awk
awk: Usage: awk [-Fc] [-f source | 'cmds'] [files]
但执行相同的命令是错误的:

root@localhost:/root# awk 'function print_name_and_age(name, age) { print name" is "age" old" } {print_name_and_age($1, $2)}'
awk: syntax error near line 1
awk: bailing out near line 1

我无法找出根本原因,有人能提供任何线索吗?

如果它说“救援”,那么您使用的是真正旧的破损awk,您可能已经在机器上安装了nawk,改用它或/usr/xpg4/bin/awk。这是我告诉awk的手册页。正如您将看到的,它不支持函数。一些awk响应此命令awk-version。“这会显示你当时正在运行的awk。”南晓没有心情写一个答案,对不起!不过我会回答这些问题。据我所知,只有老awk才使用救援。它将打印任何语法错误的bailing,以便您可以使用它检查您是否正在使用该awk/usr/xpg4/bin/awk并不奇怪,它只是旧版本的一个更具特色的版本。如果nawk可用,最好使用它。任何时候当您在第1行附近收到错误消息awk:syntax error awk:bailing out靠近第1行时,这意味着您在Solaris上使用的是旧的、损坏的awk/usr/bin/awk。在Solaris上,您应该使用/usr/xpg4/bin/awk。如果没有其他选项,但它不像/usr/xpg4/bin/awk那样兼容POSIX,那么可以使用nawk。这里有一个可供比较的指南:也许还有一种方法可以知道您安装了哪一个:
root@localhost:/root# awk 'function print_name_and_age(name, age) { print name" is "age" old" } {print_name_and_age($1, $2)}'
awk: syntax error near line 1
awk: bailing out near line 1