计算句子中的字符,单词,单词长度和总长度

myd*_*dsl 10 shell wc

我必须编写一个脚本,它接受一个句子并打印字数,字符数(不包括空格),每个单词的长度和长度.我知道wc -m在单词中有反字符数,但如何在脚本中使用它?

#!/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
Run Code Online (Sandbox Code Playgroud)

jco*_*ctx 12

对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
Run Code Online (Sandbox Code Playgroud)


Ada*_*ruk 10

echo $mystring | wc -w
Run Code Online (Sandbox Code Playgroud)

要么

echo $mystring | wc --words
Run Code Online (Sandbox Code Playgroud)

会为你做一个字数.

你可以将每个单词传递给wc:

echo $token | wc -m
Run Code Online (Sandbox Code Playgroud)

将结果存储在变量中:

mycount=`echo $token | wc -m`
echo $mycount
Run Code Online (Sandbox Code Playgroud)

要逐字逐句添加总数,请使用以下语法进行数学运算:

total=0
#start of your loop
total=$((total+mycount))
#end of your loop
echo $total
Run Code Online (Sandbox Code Playgroud)