条件付き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}重複しています。

おすすめ記事