首页 > 解决方案 > 如何使用 vars 在 awk 中排除多个非字母数字字符

问题描述

我已经定义了一系列我不想打印的字符。

在此示例中,字符 % 被正确排除:

awk 'BEGIN { FS=";";ch1 = "%";ch2 = "-"}
{
if(NR > 1)
{
    if($1 !~ ch1)
    {
            print $1
    }
} 
}
END {}' $1

但是当我添加第二个变量 ch2 它不应用任何过滤器:

请参见下面的示例:

awk 'BEGIN { FS=";";ch1 = "%";ch2 = "-"}
{
if(NR > 1)
{
    if($1 !~ ch1|| $1 !~ ch2 )
    {
            print $1
    }
} 
}
END {}' $1

如果第一列中包含 ch1 或 ch2,我希望排除该记录。

我怎样才能做到这一点?谢谢

标签: regexawk

解决方案


您应该使用&&而不是||因为您不想$1同时包含两个字符:

if($1 !~ ch1 && $1 !~ ch2 )

或者,您可以使用括号表达式:

if ($1 !~ /[%-]/)

推荐阅读