私はシェルスクリプトの初心者で、私が読んでいるファイルから配列の最大値を印刷したいと思います。 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()
。最大値を手動で追跡する必要があります。