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
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
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
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
#!/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;
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
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
code
var=(one two three)
length=${#var[@]}
echo $length
sortie
3