我是 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()
功能。您需要手动跟踪最大值。