2012-01-05 5 views
10

Мне нужно написать сценарий, который принимает предложение, и печатает количество слов, количество символов (исключая пробелы), длину каждого слова и длину. Я знаю, что существует wc -m, чтобы встретить количество символов в слове, но как использовать его в скрипте?Couting символы, слова, длина слов и общая длина в предложении

#!/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 
+0

Походит [тег: домашнее задание]. Если это так, отметьте его как таковой.Для многих из нас, если мы увидим этот тег, мы приложим больше усилий, чтобы помочь вам понять, почему ответ - это то, чем он является, а не просто предоставление решения. – ghoti

+0

спасибо, ghoti, расскажут далее. Но я просто тренируюсь со сценариями и командами оболочки – mydreamadsl

+0

И в чем ваш вопрос? – Raedwald

ответ

12

риффов на ответ Jaypal Сингха:

[email protected]:~$ mystring="one two three four five" 
[email protected]:~$ echo "string length: ${#mystring}" 
string length: 23 
[email protected]:~$ 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 
[email protected]:~$ 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 
+0

спасибо за ваш ответ, как я могу вывести только максимальную длину? – mydreamadsl

+0

Что вы подразумеваете под «максимальной длиной»? –

+0

как токен «три» - это самое большое слово в строке, а длина - 5 – mydreamadsl

10
echo $mystring | wc -w 

или

echo $mystring | wc --words 

будет делать перекличку слово для вас.

Вы можете трубы каждое слово в туалет:

echo $token | wc -m 

хранить результат в переменной:

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

добавить в общей сложности, как вы идете слово за словом, делать математику с этим синтаксис:

total=0 
#start of your loop 
total=$((total+mycount)) 
#end of your loop 
echo $total 
2

Вы очень близки. В bash вы можете использовать #, чтобы получить длину переменной.

Кроме того, если вы хотите использовать bash интерпретатор использовать bash вместо sh и первая линия идет как это -

#!/bin/bash

Используйте этот скрипт -

#!/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 
+0

Существует несколько способов сделать арифметику в оболочке. Мне нравится 'foo = $ ((bar + 1))' – mkb

3
#!/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; 
+0

Wow, cool, thanks!) Как я могу проверить максимальную длину слова в цельной строке? – mydreamadsl

3
string="i am a string" 

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

echo $n 

4 

Значение n может быть используется как целое число в выражениях

eg. 

echo $((n+1)) 
5 
0

Команда wc является хорошим выбором.

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

, где результатом является количество строк, слов и символов. В скрипте:

#!/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" 

declare встроенных слепки переменный как целое здесь, так что += добавит, а не добавлял.

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

код

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

выход

3 
+2

Краткое объяснение улучшит этот ответ. –

+2

Я скоро объясню это. Сначала мне нужно удалить свое приложение (серьезно). – Alan

Смежные вопросы