web-dev-qa-db-fra.com

Compter les caractères, les mots, la longueur des mots et la longueur totale d'une phrase

Je dois écrire un script qui prend une phrase et affiche le nombre de mots, le nombre de caractères (en excluant les espaces), la longueur de chaque mot et la longueur. Je sais qu'il existe wc -m pour contrer le nombre de caractères dans le mot, mais comment en faire usage dans un script?

#!/bin/bash

mystring="one two three test five"
maxlen=0;
for token in $mystring; do
  echo -n "$token: ";
  echo -n $token | wc -m;
    if [ ${#token} -gt $maxlen ]; then 
      maxlen=${#token}; fi;
done

echo "--------------------------";
echo -n "Total words: ";
echo "$mystring" | wc -w;
echo -n "Total chars: ";
echo "$mystring" | wc -m;
echo -n "Max length: "; 
echo $maxlen
10
mydreamadsl

se moquant de la réponse de Jaypal Singh:

jcomeau@intrepid:~$ mystring="one two three four five"
jcomeau@intrepid:~$ echo "string length: ${#mystring}"
string length: 23
jcomeau@intrepid:~$ echo -n "lengths of words: "; i=0; for token in $mystring; do echo -n "${#token} "; i=$((i+1)); done; echo; echo "Word count: $i"
lengths of words: 3 3 5 4 4 
Word count: 5
jcomeau@intrepid:~$ echo -n "maximum string length: "; maxlen=0; for token in $mystring; do if [ ${#token} -gt $maxlen ]; then maxlen=${#token}; fi; done; echo $maxlen
maximum string length: 5
12
jcomeau_ictx
echo $mystring | wc -w

ou

echo $mystring | wc --words

fera un compte de mots pour vous.

Vous pouvez diriger chaque mot vers wc:

echo $token | wc -m

pour stocker le résultat dans une variable:

mycount=`echo $token | wc -m`
echo $mycount

pour ajouter au total au fur et à mesure que vous avancez Word par Word, calculez avec la syntaxe suivante:

total=0
#start of your loop
total=$((total+mycount))
#end of your loop
echo $total
10
Adam Dymitruk
string="i am a string"

n=$(echo $string | wc -w )

echo $n

4

La valeur de n peut être utilisée comme un entier dans les expressions

eg.

echo $((n+1))
5
4
daya
#!/bin/bash

mystring="one two three test five"
for token in $mystring; do
  echo -n "$token: ";
  echo -n $token | wc -m;
done
echo "--------------------------";
echo -n "Total words: ";
echo "$mystring" | wc -w;
echo -n "Total chars: ";
echo "$mystring" | wc -m;
3
Eugen Rieck

Tu es très proche. Dans bash, vous pouvez utiliser # pour obtenir la longueur de votre variable. 

De même, si vous voulez utiliser l'interprète bash, utilisez bash au lieu de sh et la première ligne se présente comme suit: 

#!/bin/bash

Utilisez ce script -

#!/bin/bash

mystring="one two three test five"
for token in $mystring
do
    if [ $token = "one" ]
    then
        echo ${#token}
    Elif [ $token = "two" ]
    then
        echo ${#token}
    Elif [ $token = "three" ]
    then
        echo ${#token}
    Elif [ $token = "test" ]
    then
        echo ${#token}
    Elif [ $token = "five" ]
    then
        echo ${#token}
    fi
done
2
jaypal singh

La commande wc est un bon pari.

$ echo "one two three four five" | wc
       1       5      24

où le résultat est le nombre de lignes, mots et caractères. Dans un script:

#!/bin/sh

mystring="one two three four five"

read lines words chars <<< `wc <<< $mystring`

echo "lines: $lines"
echo "words: $words"
echo "chars: $chars"

echo -n "Word lengths:"
declare -i nonspace=0
declare -i longest=0
for Word in $mystring; do
  echo -n " ${#Word}"
  nonspace+=${#Word}"
  if [[ ${#Word} -gt $longest ]]; then
    longest=${#Word}
  fi
done
echo ""
echo "nonspace chars: $nonspace"
echo "longest Word: $longest chars"

La variable intégrée declare convertit une variable sous forme d'entier ici, de sorte que += ajoute plutôt que d'ajouter.

$ ./doit
lines: 1
words: 5
chars: 24
Word lengths: 3 3 5 4 4
nonspace chars: 19
0
ghoti

code

var=(one two three)
length=${#var[@]}
echo $length

sortie

3
0
Alan