Linux 开关/外壳不';我不能在awk工作

Linux 开关/外壳不';我不能在awk工作,linux,awk,Linux,Awk,我正在用redhat linux编写一个简单的awk,但发现switch/case对我不起作用。我在网上搜索,但没有找到解决办法。以下是我的代码: BEGIN { foo = 1; switch (foo) { case 3: print "x"; break; case 2: print "y" ; break; case 1: pr

我正在用redhat linux编写一个简单的awk,但发现switch/case对我不起作用。我在网上搜索,但没有找到解决办法。以下是我的代码:

 BEGIN {
   foo = 1;
     switch (foo) {
         case 3:
         print "x";
         break;
         case 2:
         print "y" ;
         break;
         case 1:
         print "z" ;
         break;
         default:
         print "default" ;
      }
 }
我正在运行的awk是GNU awk 3.1.5。我犯了以下错误:

awk-f test.awk

谁能帮帮我吗?谢谢大家!

GAWK手册上说:

6.4.5切换语句 注:本小节描述了gawk 3.1.3中添加的一个实验特性。 默认情况下不启用它。要启用它,请使用“--enable开关”选项 在配置和生成gawk时进行配置。见第B.2.2节[附加说明] 配置选项],第269页,了解更多信息

switch语句允许计算表达式和执行语句 基于案例匹配。Case语句按其顺序检查是否匹配 定义了。如果没有找到合适的案例,则执行默认部分(如果提供)

您使用的是哪个版本的
gawk
?它是用
--enable开关
选项编译的吗


如果您无法判断
gawk
是否是使用
--enable开关编译的,并且您得到了语法错误,那么可以合理地推断它不是。我使用的是默认配置编译的
gawk3.1.8
,得到的错误与您在脚本中看到的几乎一样。鉴于此,您的版本极不可能使用必要的配置选项进行编译。如果您愿意,可以使用该选项重新编译
gawk

谢谢!我的gawk版本是gawk,版本3.1.5。但是我如何知道它是否是用--enable switch选项编译的呢?如果在尝试使用switch语句时出现语法错误,那么它可能不是用
--enable switch
:)编译的。我的系统上有gawk 4.0.1。问题中的代码在没有诊断信息的情况下运行,并正确打印
z
。电流并没有说这个特征是实验性的;它只是说“此开关语句是一个gawk扩展。如果gawk处于兼容模式(请参阅选项),则它不可用。”
awk: test.awk:3:      switch (foo) {
awk: test.awk:3:                   ^ syntax error
awk: test.awk:5:          case 3:
awk: test.awk:5:                ^ syntax error
awk: test.awk:8:          case 2:
awk: test.awk:8:                ^ syntax error
awk: test.awk:11:          case 1:
awk: test.awk:11:                ^ syntax error
awk: test.awk:14:          default:
awk: test.awk:14:                 ^ syntax error