Awk 다중 표현 문제

Awk 다중 표현 문제

아래 코드에 어떤 문제가 있는지 누구든지 도와줄 수 있습니까? - 헤더가 있는 고정 너비 파일이 있고 파일에서 null 값을 계산하려고 합니다. null 패턴 $col_null_patt=\s가 있고 열 시작 및 열 길이를 사용하여 파일에서 열을 부분 문자열로 묶고 정규식 일치를 시도합니다.

질문:-

awk: cmd. line:1: BEGIN {m = ENVIRON["RE"]} c=substr($0,m,p);if($n ~ "^" m "$"{N++} END{print N+0}
awk: cmd. line:1:                                            ^ syntax error

코드는 아래와 같이 표시됩니다.

 thres=$( RE="$col_null_patt" 
           awk  -v m="$col_start" -v p="$col_len" 
           'BEGIN {n= ENVIRON["RE"]} 
            c=substr($0,m,p);
            if(NR >1 && c ~ "^" n "$"{N++} END{print N+0}' "$cp_input")

답변1

thres=$(
  RE="$col_null_patt" awk -v m="$col_start" -v p="$col_len" '
    # condition                action
    BEGIN                      {re = ENVIRON["RE"]} 
                               {c = substr($0,m,p)}
    NR > 1 && c ~ "^(" re ")$" {N++}
    END                        {print N+0}
    ' < "$cp_input"
)
  • 에 환경 변수를 VAR=value awk...전달 해야 합니다 . 를 사용하려면 셸 변수를 정의한 다음 호출하면 됩니다 (미리 내보낸 경우에만 의 환경에 있음).VARawkVAR=value␤awk$VARawkVARawk
  • awk패턴의 설명을 따르는 것을 잊지 마세요 condition { action }. 각 입력 레코드에 대해 실행 하려면 c=substr($0,m,p)true로 평가되는 조건 부분이 있거나 조건 부분이 없는 작업 섹션에 이를 넣어야 합니다.

그러나 \s(공백 문자를 의미함)은 표준이 아니며 소수의 awk 구현에서 이해됩니다. col_null_patt='[[:space:]]'표준이 되고 휴대성이 향상됩니다. 또는 col_null_patt='[[:space:]]*'원하는 수의 공백(빈 공백 포함)과 일치시킵니다.

관련 정보