awk 中 IF 条件的正则表达式

awk 中 IF 条件的正则表达式

我有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;
    }    
   }
}

如果我使用我发布的相同条件,我会收到错误。如何添加条件?

答案1

您实际上并没有展示如何添加正则表达式,所以我猜测您正在使用相同的格式:=~ [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;
    }    
   }
}

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

相关内容