开关/外壳在awk中不起作用

时间:2012-07-09 19:41:53

标签: linux 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

任何人都可以帮帮我吗?谢谢!

1 个答案:

答案 0 :(得分:11)

GAWK手册说:

  

6.4.5开关声明

     

注意:本小节描述了gawk 3.1.3中添加的实验性功能。   默认情况下不启用它。要启用它,请使用'--enable-switch'选项   配置和构建gawk时配置。见B.2.2节[附加   配置选项],第269页,了解更多信息。

     

switch语句允许评估表达式和语句的执行   基于案例匹配。根据它们的顺序检查案例陈述是否匹配   定义。如果找不到合适的案例,则执行默认部分(如果提供)。

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

如果您无法判断gawk是否使用--enable-switch编译并且您遇到了语法错误,则推断它不是。我正在使用使用默认配置编译的gawk 3.1.8,并且几乎可以获得您在脚本上看到的错误。鉴于此,您的版本不太可能使用必要的配置选项进行编译。如果您愿意,可以使用该选项重新编译gawk