awk中的语法错误if else

时间:2012-06-24 07:36:41

标签: awk syntax-error

我在if else中使用awk语句。每次我使用它时,我都会收到语法错误。谁能告诉我如何使用它?我收到如下所示的语法错误。

代码:

awk '{ FS = "=" ;if($1 ~ /Hi/) {if (!($1=="Hi")) {print $1;}} else {if($1=="bye") {print $1;}}} else {if(if($1=="good") {print $1;}}} END {print $1}'

输出:

awk: { FS = "=" ;if($1 ~ /Hi/) {if (!($1=="Hi")) {print $1;}} else {if($1=="bye") {print $1;}}} else {if(if($1=="good") {print $1;}}} END {print $1}

awk:                                                                                            ^ syntax error

awk: { FS = "=" ;if($1 ~ /Hi/) {if (!($1=="Hi")) {print $1;}} else {if($1=="bye") {print $1;}}} else {if(if($1=="good") {print $1;}}} END {print $1}

awk:                                                                                                     ^ syntax error

awk: { FS = "=" ;if($1 ~ /Hi/) {if (!($1=="Hi")) {print $1;}} else {if($1=="bye") {print $1;}}} else {if(if($1=="good") {print $1;}}} END {print $1}

awk:                                                                                                                                ^ syntax error

3 个答案:

答案 0 :(得分:2)

第一个问题是,在3个右括号的序列中,你已经完成了整个脚本,所以行的其余部分会导致语法错误。

您在if条件下也有if声明。

我不确定你想要写什么,但是这样的事情可能就是你在想的:

{ 
    FS = "=";
    if ($1 ~ /Hi/) {
        if (!($1=="Hi")) {print $1;}
    } else if ($1=="bye") {
        print $1;
    } else if ($1=="good") {
        print $1;
    }
} 
END {
    print $1
}

http://ideone.com/srNzp

答案 1 :(得分:1)

问题

您的代码有错误很多。你有不平衡的支撑,差的间距和其他使调试变得困难的问题。最终,你有语法和引用问题。

解决方案

您可以通过将作业移到脚本外部来简化代码。这更具可读性且不易出错。例如:

$ echo "foo=bar" | awk -F= '{print $1}'
foo

除非您在运行时将其重新分配给不同的东西,否则您也可以将分配移动到BEGIN块。

BEGIN { FS = "=" }

无论你做什么,如果你重构你的代码以获得可读性,那么调试你的脚本会更容易。

答案 2 :(得分:0)

{if(if($1=="good") {print $1;}}}

错了。第一个花括号在第二个右括号处关闭,其中只有一个圆括号已经关闭。

更多:if(如果看起来非常错误。当跟随其他构造时可能会愈合,而在大多数情况下,您只需使用if(a&& b))来组合多个条件,或者如果(a)if (b)c其他d。

 {if($1=="good") {print $1;}} 

似乎在这里。片刻之后,我会尝试找到更多。

是的 - 还有更多无与伦比的大括号。你可以考虑使用Allman Style缩进来控制它:每个{前面的换行符,然后是一个新的缩进级别,直到大括号被关闭。看:

awk '{ FS = "=" ;
if($1 ~ /Hi/) 
{
    if (!($1=="Hi")) 
    {
        print $1;
    }
} else 
{
    if($1=="bye") 
    {
        print $1;
    }
}
} // <- doesn't match any open brace
else 
{
    if ($1=="good") 
    {
        print $1;
    }
}
} // <- again
END {print $1}'

如果将光标放在其中一个旁边,许多编辑器会帮助突出匹配括号。你至少还有2个无与伦比的结束括号。