2012-01-05 21 views
10

मुझे एक ऐसी स्क्रिप्ट लिखनी है जो वाक्य लेती है और शब्द गणना, चरित्र गणना (रिक्त स्थान को छोड़कर), प्रत्येक शब्द और लंबाई की लंबाई मुद्रित करती है। मुझे पता है कि शब्द में वर्णों की संख्या का मुकाबला करने के लिए 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 
+0

की तरह लगता है। यदि ऐसा है, तो कृपया इसे इस तरह टैग करें।हम में से कई लोगों के लिए, अगर हम उस टैग को देखते हैं, तो हम आपको यह जानने में मदद करने के लिए एक बड़ा प्रयास करेंगे कि इसका समाधान केवल समाधान प्रदान करने के बजाय क्यों है। – ghoti

+0

धन्यवाद, ghoti, आगे का उल्लेख करेंगे। लेकिन मैं सिर्फ स्क्रिप्ट और खोल कमांड के साथ अभ्यास कर रहा हूं – mydreamadsl

+0

और आपका प्रश्न क्या है? – Raedwald

उत्तर

12

Jaypal सिंह के जवाब पर riffing में एक पूर्णांक के रूप में इस्तेमाल:

[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 

एक शब्द आप के लिए गिनती करेंगे।

आप पाइप WC के प्रत्येक शब्द कर सकते हैं:

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 दुभाषिया का उपयोग sh के बजाय bash चाहते हैं और पहली पंक्ति इस तरह हो जाता है - इस स्क्रिप्ट

#!/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 = $ ((बार + 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

वाह, अच्छा, धन्यवाद!) मैं पूरी स्ट्रिंग में शब्द की अधिकतम लंबाई कैसे देख सकता हूं? – mydreamadsl

3
string="i am a string" 

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

echo $n 

4 

एन का मान हो सकता है भाव

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

संबंधित मुद्दे