我在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
答案 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
}
答案 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个无与伦比的结束括号。