Estou tentando encontrar uma maneira melhor / mais fácil de contar caracteres alfabéticos em uma variável de arquivo ou shell

5

Eu tenho um arquivo contendo o seguinte texto:

we are going to write something 1 2 3

wc diz que eu tenho 1 linha 9 palavras e 38 caracteres.

Pretendo contar apenas as 26 letras ( a-z , sem números ou espaços em branco, etc.).

Aqui está minha solução atual:

grep -o [[:alpha:]] filename | wc -l

Eu realmente quero saber se existe uma maneira "melhor" de fazer isso na linha de comando.

    
por user3347022 20.09.2014 / 17:01

3 respostas

3

Eu excluiria todos os caracteres não-alfa usando tr e contaria o número de caracteres resultantes. Passar a solução tr e sua solução para bash time interna sugere que a solução tr é aproximadamente 5 vezes mais rápida, pelo menos no meu sistema

tr -cd '[:alpha:]' <filename | wc -m
    
por 20.09.2014 / 19:06
0

você pode usar awk para descobrir isso também!

awk '{c+=gsub(s,s)}END{print c}' s='[[:alpha:]]' filename
    
por 20.09.2014 / 19:17
0

Tente:

LC_ALL=C grep -o [[:alpha:]] | sort -u | wc -l

Altere LC_ALL=C.UTF-8 ou sua localidade para corresponder ao seu próprio idioma [a-zA-Z] .

    
por 20.09.2014 / 19:17