Question

J'ai utilisé:

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

compter toutes les lettres,

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

compter tous les espaces,

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

pour compter toutes les nouvelles lignes dans un document texte.

Ce que je voudrais faire maintenant, c'est compter tous les autres caractères du document comme j'appellerai tout le reste.

Voici le texte du document :

Bonjour, il s'agit d'un document texte de test.

123

!@#

Y a-t-il un moyen de tout supprimer [:alpha:], , et \n trouvé et compter les caractères restants ?

Était-ce utile?

La solution

Cela devrait faire l'affaire

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

Ou peut-être si vous souhaitez inclure des onglets dans la définition des espaces

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

Sur la base du commentaire du PO, pour supprimer les caractères alphabétiques, les espaces, les chiffres et les nouvelles lignes et compter tous les caractères restants :

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

[:alnum:] représente les lettres de l'alphabet et les chiffres. [:space:] prend en charge tous les espaces, y compris les nouvelles lignes

Autres conseils

Je poste juste ici pour référence, si vous souhaitez tout faire d'un seul coup, alors ceci awk le script devrait fonctionner :

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top