开关/shell在awk中不起作用

我在redhat linux中写了一个简单的awk,但是发现switch / case对我不起作用。 我在网上search,但没有find解决办法。 以下是我的代码:

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 switch语句

注意:本小节介绍了在gawk 3.1.3中添加的一个实验性功能。 它没有默认启用。 要启用它,请使用“–enable-switch”选项来配置何时正在配置和构建gawk。 有关更多信息,请参见第B.2.2节[其他配置选项],第269页。

switch语句允许根据大小写匹配评估表达式和执行语句。 案例语句按照定义的顺序检查匹配。 如果找不到合适的情况,则执行缺省部分(如果提供)。

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

如果你不能分辨gawk是否使用了--enable-switch编译,并且你得到了语法错误,那么可以推断它不是。 我正在使用默认配置编译的gawk 3.1.8 ,并得到几乎完全在脚本上看到的错误。 鉴于此,使用必要的配置选项编译您的版本的可能性极小。 如果你想要的话,用选项重新编译gawk并不难。