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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top