조건 오류가 발생하면 awk [닫기]

조건 오류가 발생하면 awk [닫기]

조건에 따라 필터링하는 awk 명령을 작성했습니다.

awk '{if(( (substr($0,9,3) == "TGO") &&  ((substr($0,1,4) == "9123" || (substr($0,1,4) == "9704"))) print (substr($0,279,2),substr($0,1,4),substr($0,5,8));}' Downloadfinance.txt

구문 오류입니다. 여러 가지 방법을 시도했지만 여전히 동일한 예외가 발생합니다.

이건 오류야

awk: cmd. line:1: {if(( (substr($0,9,3) == "TGO") &&  ((substr($0,1,4) == "9123" || (substr($0,1,4) == "9704"))) print (substr($0,9,3),substr($0,1,4),substr($0,5,8));}
awk: cmd. line:1:                                                                                                 ^ syntax error
awk: cmd. line:1: {if(( (substr($0,9,3) == "TGO") &&  ((substr($0,1,4) == "9123" || (substr($0,1,4) == "9704"))) print (substr($0,9,3),substr($0,1,4),substr($0,5,8));}
awk: cmd. line:1:                                                                                                                                                       ^ syntax error

답변1

두 개가 누락되었거나 )하나가 누락되고 )또 하나가 누락되었습니다.(

수정된 코드(추가 대괄호가 제거되었습니다. 여기서 줄 바꿈은 설명을 위한 것일 뿐이며 실제로 실행되지는 않습니다):

{
        if (
                substr($0,9,3) == "TGO" &&
                (
                        substr($0,1,4) == "9123" || substr($0,1,4) == "9704"
                )
        )
                print substr($0,279,2), substr($0,1,4), substr($0,5,8)
}

또는 (이 구문은 개행 문자의 위치에 적합합니다)

{
        if (substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704" ))
                print substr($0,279,2), substr($0,1,4), substr($0,5,8)
}

또는 (패턴 작업 메커니즘 사용)

substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704") {
        print substr($0,279,2), substr($0,1,4), substr($0,5,8)
}

코드의 형식은 위의 첫 번째 변형과 동일하지만 모든 괄호는 그대로 유지됩니다.

{
        # too many ( below
        if ((
                (substr($0,9,3) == "TGO") &&
                (
                        # missing ) below, alt. too many ( and )
                        (substr($0,1,4) == "9123" || (substr($0,1,4) == "9704")
                )
        )
                print (substr($0,279,2),substr($0,1,4),substr($0,5,8))
}

답변2

테스트할 파일을 제공하지 않았기 때문에 확실하지 않지만 다음과 같이 작성하려는 것으로 추측됩니다.

awk '{ if( substr($0,9,3) == "TGO" && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704")){ print substr($0,279,2),substr($0,1,4),substr($0,5,8)}}' Downloadfinance.txt

또는 더 명확하게 말하자면:

awk '{ 
        if( substr($0,9,3) == "TGO" && 
            (substr($0,1,4) == "9123" || substr($0,1,4) == "9704")){ 
                print substr($0,279,2),substr($0,1,4),substr($0,5,8)
            }
    }' Downloadfinance.txt

답변3

또는 if조건을 규칙 전제 조건으로 이동할 수 있습니다.

awk  'substr($0,9,3) == "TGO"  && (substr($0,1,4) == "9123" || substr($0,1,4) == "9704"){
                print substr($0,279,2),substr($0,1,4),substr($0,5,8)
              }'

이를 다음과 같이 단순화할 수도 있습니다.

awk 'substr($0,9,3) == "TGO"  && (/^9123/ || /^9704/) { print .... }'

답변4

당신이 사용하는 경우암소 비슷한 일종의 영양앗 (또는 할 수 있다)특징이 있어요이 문제를 직접 처리하려면:

awk -vFIELDWIDTHS="4 4 3 267 2" '$3=="TGO" && ($1=="9123"||$1=="9704"){ print $5,$1,$2 }'

관련 정보