Estoy intentando usar tr con varios conjuntos y no estoy seguro de cómo
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?
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