在 AWK 中使用 END 特殊模式时出现语法错误

在 AWK 中使用 END 特殊模式时出现语法错误

我是 shell 脚本编写的初学者,我正在尝试从我正在阅读的文件中打印出数组的最大值。当我不使用 END 语句时,代码工作正常,但会给出错误,指出添加 END 语句时 if 语句处或附近存在语法错误。你能帮我找出代码中的错误吗?

#!/bin/sh
awk '
if(FNR==7)
{
natoms=$1+$2+$3
print natoms
}
if(FNR==8) {
       if($1=="selective"){
        start=10
        end=start+natoms-1
        }
       else{
        start = 9
        end = start+natoms-1
        }
       }
if(start<=FNR && FNR<=end){
                
                arr[FNR-10+1] = $3
                print max[arr]
              }
END {print natoms}' POSCAR

答案1

养成使用正确缩进的习惯,这样错误就会变得更容易看到。一个好的编程编辑器可以帮助解决这个问题。

随着 awk 程序变得越来越大,将 awk 代码放入它自己的文件中。例如,如果这是poscar.awk

FNR==7 {
    natoms=$1+$2+$3
    print natoms
}
FNR==8 {
    if($1=="selective"){
        start=10
        end=start+natoms-1
    }
    else{
        start = 9
        end = start+natoms-1
    }
}
start<=FNR && FNR<=end {
    arr[FNR-10+1] = $3
    print max[arr]
}
END {print natoms}

然后你可以像这样运行它

awk -f poscar.awk POSCAR

print max[arr]==>没有max 大批在你的代码中。而awk没有任何max()功能。您需要手动跟踪最大值。

相关内容