AWK에서 END 특수 모드를 사용할 때 구문 오류

AWK에서 END 특수 모드를 사용할 때 구문 오류

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

관련 정보