特殊文字を含む値の数を出力します。

特殊文字を含む値の数を出力します。

以下のテキストファイルがあります。 2番目の列をチェックして、特殊文字を含む値の数を出力したいと思います。

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

私はawkを使ってみます:

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

しかし、うまくいきません。 awk以外の方法はありませんか?

ベストアンサー1

これを行う方法はいくつかあります。あなたの質問にこれを指定しませんでしたが、あなたのawkアプローチは、以下を含む2番目のフィールドを計算することです。完全特殊文字は、まさに私の解決策が行うことです。これが望ましくなく、1つ以上の特殊文字を含むフィールドのみを計算するには、一致^演算子からおよびを削除します。$

  1. 奇妙な:

    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
    

おすすめ記事