Sto cercando di usare TR con più set e non sono sicuro di come
Domanda
Ho usato:
tr -dc [:alpha:] < $fileDoc | wc -c
.
Per contare tutte le lettere,
tr -dc ' ' < $fileDoc | wc -c
.
Per contare tutti gli spazi,
tr -dc '\n' < $fileDoc | wc -c
.
Per contare tutte le nuove righe in un documento di testo.
Quello che vorrei fare ora è fare ora è contare tutti gli altri personaggi nel documento perché chiamerò ogni altra cosa.
Ecco il testo dal documento:
Ciao Questo è un documento di testo di prova.
123
!@#
.
C'è un modo per eliminare tutto [:alpha:]
, e
\n
trovato e conta i caratteri rimanenti?
Soluzione
Questo dovrebbe fare il trucco
tr -d '[:alpha:] \n' < $fileDoc | wc -c
.
o forse se vuoi includere schede nella definizione di spazi vuoti
tr -d '[:alpha:][:space:]' < $fileDoc | wc -c
.
Basato sul commento dell'OP, per eliminare alfabetico, spazi, cifre e newlines e contare tutti i caratteri rimanenti:
tr -d '[:alnum:][:space:]' < $fileDoc | wc -c
.
[:alnum:]
Account per lettere dell'alfabeto e cifre.[:space:]
si prende cura di tutti gli spazi bianchi, comprese le neonate
Altri suggerimenti
Basta pubblicare qui per riferimento, se desideri effettuare tutte in un unico colpo, questo script awk
dovrebbe funzionare:
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