Pergunta

Eu tenho usado:

tr -dc [:alpha:] < $fileDoc | wc -c

para contar todas as letras,

tr -dc ' ' < $fileDoc | wc -c

a contagem de todos os espaços,

tr -dc '\n' < $fileDoc | wc -c

a contagem de todas as novas linhas em um documento de texto.

O que eu gostaria de fazer agora é fazer agora é contar todos os outros caracteres no documento, como vou chamar de qualquer outra coisa.

Aqui está o texto do documento:

Olá, este é um texto de teste documento.

123

!@#

Existe uma maneira de eliminar tudo [:alpha:], , e \n encontrado e contar os caracteres restantes?

Foi útil?

Solução

Isso deve fazer o truque

tr -d '[:alpha:] \n'  < $fileDoc | wc -c

Ou talvez, se você deseja incluir guias na definição de espaços em branco

tr -d '[:alpha:][:space:]'  < $fileDoc | wc -c

Com base no OP comentário, para eliminar alfabética, espaços, dígitos, e quebras de linha e contagem de todos os caracteres restantes:

tr -d '[:alnum:][:space:]' < $fileDoc | wc -c

[:alnum:] contas para letras do alfabeto e algarismos. [:space:] cuida de todos os espaços, incluindo quebras de linha

Outras dicas

Apenas postando aqui para referência, se você quiser fazer all in one-shot, então este awk script deve funcionar:

awk -v FS='' '
{
    for(i=1; i<=NF; i++) {
        if($i ~ /[a-zA-Z]/) {alpha++};
        if($i == " ") {space++};
        if($i !~ /[A-Za-z0-9 ]/) {spl++}
    }
}
END {
    printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file

$ cat file
This is a text
I want to count
alot of $tuff
in 1 single shot

$ awk -v FS='' '
{
    for(i=1; i<=NF; i++) {
        if($i ~ /[a-zA-Z]/) {alpha++};
        if($i == " ") {space++};
        if($i !~ /[A-Za-z0-9 ]/) {spl++}
    }
}
END {
    printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
Space=11, Alphabets=45, SplChars=1, NewLines=4
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top