저는 쉘 스크립팅의 초보자이고 제가 읽고 있는 파일에서 배열의 최대값을 인쇄하려고 합니다. 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()
. 최대값을 수동으로 추적해야 합니다.