私のコードは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}
重複しています。