Existem várias maneiras de fazer isso. Você não especifica isso em sua pergunta, mas sua abordagem awk
está tentando contar os segundos campos que consistem em inteiramente de caracteres especiais, e é isso que minhas soluções também estão fazendo. Se isso não for o que você deseja e, em vez disso, você quiser contar os campos que simplesmente contêm pelo menos um caractere especial, remova os ^
e $
dos operadores de correspondência.
-
awk:
awk -F, '{if($2 ~ /^[$*&%#]+$/) cnt++;} END {print cnt}' sample.txt
-
Perl:
perl -F, -lane '$cnt++ if $F[1]=~/^[\$*&%#]+$/; END{print $cnt}' sample.txt
-
grep (este assume que há sempre apenas 3 campos):
grep -cP ',[\$*&%#]+,' sample.txt
-
Shell
count=0; while IFS="," read one two three; do [[ -z ${two##[\*&%\$#]*} ]] && let count++; done < sample.txt; echo $count