打印其中包含特殊字符的值的数量

打印其中包含特殊字符的值的数量

我有一个如下所示的文本文件。我想检查第二列并打印其中包含一些特殊字符的值的计数。

101,aaa,d01
102,*&%,d02 
103,$%&,d03
104,###,d04

我尝试使用 awk:

awk -F, '{if ($2 ~ (/^[$*&%#]+$/) count+1;} END {print count}' sample.txt

但它不起作用。除了awk之外还有其他方法吗?

答案1

有很多方法可以做到这一点。您没有在问题中指定这一点,但是您的awk方法是尝试计算包含的第二个字段完全特殊字符,这也是我的解决方案正在做的事情。如果这不是您想要的,而是您想要对仅包含至少一个特殊字符的字段进行计数,请从匹配运算符中删除^and 。$

  1. awk:

    awk -F, '{if($2 ~ /^[$*&%#]+$/) cnt++;} END {print cnt}' sample.txt
    
  2. 珀尔:

    perl -F, -lane '$cnt++ if $F[1]=~/^[\$*&%#]+$/; END{print $cnt}' sample.txt
    
  3. grep (这个假设总是只有 3 个字段):

    grep -cP ',[\$*&%#]+,' sample.txt 
    
  4. count=0;
    while IFS="," read one two three; do 
        [[ -z ${two##[\*&%\$#]*} ]] && let count++; 
    done < sample.txt; 
    echo $count
    

答案2

这个怎么样

awk -F, '{if ($2 ~ /[^:alnum:]/) l=length($2);print $0" "l}' sample.txt
101,aaa,d01 
102,*&%,d02 3
103,$%&,d03 3
104,###,d04 3

打印每行“特殊字符”的计数,这里的字符不是 alnum。

答案3

正如其他人提到的,目前尚不清楚确切地你想要做什么,但你可以这样修复你的方法的语法:

awk -F, '$2 ~ /^[$*&%#]+$/ { count++ } END {print count}' sample.txt

相关内容