조건문을 전달할 때 awk 문에 문제가 있습니다.

조건문을 전달할 때 awk 문에 문제가 있습니다.

조건에 따라 파일의 열에 대한 빈 레코드 수를 계산하려고 합니다. 하지만 여건이 좋지 않습니다.

  • 입력 예: 고정 너비 파일,
                 761128424607/22/20197611284246CAD052020DHH 0073578EKLAVY3
ELEKBAFXXL7900271761128424406/22/20197611284244CAD042020DKA 0038244EDITTU8                     
                 761128424606/22/20197611284246CAD052020DHH 0073578EKLAVY3                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
ELEKBAFXXL7900271761128424406/22/20197611284244CAD042020DKA 0038244EDITTU8
  • 암호
    RE='[[:space:]]{17}' awk -v m=1 -v p=17 -v r='&& substr($0,28,2)==06'
        $'BEGIN{re = ENVIRON["RE"]}{c = substr($0,m,p)}  c ~ "^(" re ")$" r  {N++}  END {print N+0}' <  input_file.txt
    
  • 원하는 출력: 1, 파일의 레코드 2개가 비어 있고 레코드 1개가 조건을 만족하기 때문입니다.substr($0,28,2)==06
  • 실제 출력: 0, 이는 잘못된 것입니다.

ベストアンサー1

이것은 쉘 변수의 내용을 해석하기 위해 호출되기 전에 awk 스크립트의 일부로 확장함으로써 r요구하는 작업을 수행 하지만 실제로 원하는 작업을 수행하는 더 나은 방법이 거의 확실합니다 awk.

$ r='&& substr($0,28,2)=="06"'
$ RE='[[:space:]]{17}' awk -v m=1 -v p=17 '
    BEGIN { re = ENVIRON["RE"] }
    { c = substr($0,m,p) } 
    c ~ "^(" re ")$" '"$r"' { N++ }
    END { print N+0 }
' file
1

어딘가에 작성 해야 한다면 && substr($0,28,2)=="06"쉘 변수 대신 awk 스크립트로 작성하지 않는 이유가 전혀 명확하지 않습니다. 원하는 것이 무엇이든 더 나은 방법이 있어야 합니다.

おすすめ記事