아래 코드에 어떤 문제가 있는지 누구든지 도와줄 수 있습니까? - 헤더가 있는 고정 너비 파일이 있고 파일에서 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...
전달 해야 합니다 . 를 사용하려면 셸 변수를 정의한 다음 호출하면 됩니다 (미리 내보낸 경우에만 의 환경에 있음).VAR
awk
VAR=valueawk
$VAR
awk
VAR
awk
awk
패턴의 설명을 따르는 것을 잊지 마세요condition { action }
. 각 입력 레코드에 대해 실행 하려면c=substr($0,m,p)
true로 평가되는 조건 부분이 있거나 조건 부분이 없는 작업 섹션에 이를 넣어야 합니다.
그러나 \s
(공백 문자를 의미함)은 표준이 아니며 소수의 awk 구현에서 이해됩니다. col_null_patt='[[:space:]]'
표준이 되고 휴대성이 향상됩니다. 또는 col_null_patt='[[:space:]]*'
원하는 수의 공백(빈 공백 포함)과 일치시킵니다.