J'essaie d'utiliser tr avec plusieurs ensembles et je ne sais pas comment
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 ?
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