Awk If-Elseif-If 块

Awk If-Elseif-If Block

NR>NRMIN{
    if( == "Leu") {
        if( == "CD1" ||  == "HD11" ||  == "HD12" ||  == "HD13") {
            next;
        }
    }
    elseif( == "Val") {
        if( == "CD1" ||  == "HD11" ||  == "HD12" ||  == "HD13") {
            next;
        }
    }
    else {
        print;
    }   
}

我打算有选择地打印 space 分隔文件的行。 请告诉我为什么上面的代码在 gawk -f FILE_Modifier.awk NRMIN = 90 FILE > NEWFILE

时出错

错误信息

gawk: FILE_Modifier.awk:7:     elseif( == "Val") {
gawk: FILE_Modifier.awk:7:                         ^ syntax error
gawk: FILE_Modifier.awk:12:     else {
gawk: FILE_Modifier.awk:12:     ^ syntax error

没有elseif。无论如何,您可以将脚本重写为:

awk -v nrmin=90 '(NR > nrmin) && !(( ~ /^(Leu|Val)$/) && ( ~ /^(CD1|HD11|HD12|HD13)$/))' file

不要使用全部大写的变量名以避免与内置名称发生冲突。除非有特殊原因,否则请使用 -v 预先设置变量。