我的代码可以解析 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}
是多余的。