awk 中 IF 条件下的正则表达式

Lax*_*Sam 4 awk regular-expression

我有awk如下脚本文件。我需要在if语句中添加另一个条件来检查字符串是否至少包含一个字母表。如何在当前if语句中添加额外条件?

所需的正则表达式条件: [[ "$1" =~ [A-Za-z] ]]

BEGIN { FS = ";"; counter=0}

{ 
 if ((length($1) != 10 && length($1) != 12))
   { 
    counter++
    print counter, $1;
    if ($counter -gt 2){
        print "Invalid input file";
        exit;
    }    
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用与我发布的条件相同的条件,则会出现错误。如何添加条件?

ter*_*don 12

您实际上并未展示如何添加正则表达式,因此我猜您使用的是相同的格式:=~ [A-Za-z]. 那行不通。每种语言都有自己的正则表达式匹配语法。在 中awk,格式是$target ~ /$regex/,所以$1 ~ /[A-Za-z]/

BEGIN { FS = ";"; counter=0}

{ 
 if (length($1) != 10 && length($1) != 12 && $1 ~ /[A-Za-z]/)
   { 
    counter++
    print counter, $1;
    if (counter > 2){
        print "Invalid input file";
        exit;
    }    
   }
}
Run Code Online (Sandbox Code Playgroud)

此外,在 中awk$符号用于标记字段,而不是变量。So$counter将被评估为 的字段编号counter。如果counter2$counter则将是第二个字段的值。而且这-gt也不是 awk 的事情。只需使用>.