Imprime o número de valores que possuem os caracteres especiais neles

1

Eu tenho um arquivo de texto como o abaixo. Quero verificar a segunda coluna e imprimir a contagem de valores que possuem alguns caracteres especiais.

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

Eu tentei com o awk:

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

mas não está funcionando. Existe alguma outra maneira além do awk para fazer isso?

    
por user64676 11.04.2014 / 09:01

3 respostas

1

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.

  1. awk:

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

    perl -F, -lane '$cnt++ if $F[1]=~/^[\$*&%#]+$/; END{print $cnt}' sample.txt
    
  3. grep (este assume que há sempre apenas 3 campos):

    grep -cP ',[\$*&%#]+,' sample.txt 
    
  4. Shell

    count=0;
    while IFS="," read one two three; do 
        [[ -z ${two##[\*&%\$#]*} ]] && let count++; 
    done < sample.txt; 
    echo $count
    
por 11.04.2014 / 17:32
0

Que tal isso

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

Imprime cada linha a contagem de "caracteres especiais", aqui caracteres que não são alnum.

    
por 11.04.2014 / 17:45
0

Como outros já mencionaram, não está claro exatamente o que você quer fazer, mas você pode corrigir a sintaxe de sua abordagem assim:

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