Pregunta

He usado:

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

para contar todas las letras,

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

para contar todos los espacios,

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

para contar todas las líneas nuevas en un documento de texto.

Lo que me gustaría hacer ahora es contar todos los demás caracteres del documento, como llamaré a todo lo demás.

Aquí está el texto del documento:

Hola, este es un documento de texto de prueba.

123

!@#

¿Hay alguna manera de borrar todo? [:alpha:], , y \n encontrado y contar los caracteres restantes?

¿Fue útil?

Solución

Esto debería funcionar

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

O tal vez si deseas incluir pestañas en la definición de espacios en blanco

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

Según el comentario del OP, para eliminar alfabéticos, espacios, dígitos y nuevas líneas y contar todos los caracteres restantes:

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

[:alnum:] cuenta las letras del alfabeto y los dígitos. [:space:] se encarga de todos los espacios en blanco, incluidas las nuevas líneas

Otros consejos

Solo publico aquí como referencia, si desea hacer todo de una sola vez, entonces esto awk el guión debería 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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top