开关/机箱在 awk 中不起作用



我正在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

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

有人能帮我吗?非常感谢。

GAWK手册上说:

6.4.5交换机声明

注:本小节描述了在gawk3.1.3中添加的实验功能。默认情况下未启用。要启用它,请使用"--enable switch"选项配置gawk的配置和生成时间。参见第B.2.2节[附加配置选项],第269页,了解更多信息。

switch语句允许表达式的求值和语句的执行基于案例匹配。案例陈述按其匹配顺序进行检查定义。如果没有找到合适的情况,则执行默认部分(如果提供)。

您正在使用哪个版本的gawk?它是用--enable-switch选项编译的吗?

如果你不能判断gawk是否是用--enable-switch编译的,并且你得到了语法错误,那么可以推断它不是。我使用的是使用默认配置编译的gawk 3.1.8,得到的错误几乎与您在脚本中看到的错误完全相同。鉴于此,您的版本不太可能使用必要的配置选项进行编译。如果你想的话,用这个选项重新编译gawk并不难。

最新更新