Eu estou tentando usar o tr com vários conjuntos e não sei como
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?
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