我正在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
并不难。