我在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
任何人都可以帮帮我吗?谢谢!
答案 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
。