조건부 awk 문을 사용하여 정규식 패턴 제어

조건부 awk 문을 사용하여 정규식 패턴 제어

내 코드는 csv 파일을 구문 분석한 다음 정규식을 기반으로 각 필드를 확인합니다. 다만, 다른 필드에 데이터가 있을 경우 필수로 입력해야 하는 필드도 있기 때문에 데이터 흐름을 제어하기 위한 조건부 블록이 필수적으로 필요합니다. 샘플 파일의 예는 아래를 참조하세요.

 "S","HEY","J","B","0",""

그래서 나에게 필요한 것은 표현하는 방법이다.

if $1 == "S"
USE THIS regex ($3~/^("[A-Z0-9]{1}")$/) {print "3RDfield invalid-HEADER-FILE";}
else 
USE THIS REGEX ($3~/^("")$/) {print "3RDfield invalid-HEADER-FILE";}

인라인 버전을 사용해 보았습니다.

$1== "S" && ($3~/^"[A-Z0-9]{1}"$/) {print "3RD field invalid-HEADER-      FILE";}  
$1 != "S" && ($3~/^("")$/) {print "3RDfield invalid-HEADER-FILE";}

답변1

 {
   if ($1 == "\"S\"")
     regex = "^\"[[:upper:][:digit:]]\"$"
   else
     regex = "^\"\"$"
 }
 $5 ~ regex {print "error"}

또는 삼항 연산자를 사용하십시오.

 $5 ~ ($1 == "\"S\"" ? "^\"[[:upper:][:digit:]]\"$" : "^\"\"$") {
   print "error"
 }

[A-Z], 는 [0-9]C 이외의 로케일에 있는 모든 항목과 일치할 수 있으며 때로는 일치합니다. [[:digit:]]반면 [0123456789][[:upper:]] 대문자(로케일의 모든 문자, 발음 구별 부호가 없는 라틴 문자로 제한되지는 않음)와 일치 합니다.

{1}중복됩니다.

관련 정보