11

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

有人可以帮帮我吗?谢谢你!

4

1 回答 1

13

GAWK 手册说:

6.4.5 switch 语句

注意:本小节描述了 gawk 3.1.3 中添加的实验性功能。默认情况下未启用。要启用它,请在配置和构建 gawk 时使用“--enable-switch”选项进行配置。有关详细信息,请参见第 B.2.2 节 [其他配置选项],第 269 页。

switch 语句允许对表达式求值并根据大小写匹配执行语句。Case 语句按照定义的顺序检查是否匹配。如果没有找到合适的情况,则执行默认部分(如果提供)。

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

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

于 2012-07-09T19:44:50.377 回答