मेरे पास नीचे दिया गया कोड है। मैं wc
, awk
, tr
, आदि।
मैं शब्दों की कुल संख्या गिनने में सक्षम हूं, लेकिन यहां मेरे पास एक मुद्दा भी है: आउटपुट में मुझे कुल शब्द गणना नहीं मिल रही है, आउटपुट जो होना चाहिए उससे कम है।
मुझे क्या करना चाहिए?
#!/bin/bash
#v=1
echo -n "ENTER FILE NAME: "
read file
IFS=$'\n'
cnew_line=`echo -e "\n"`
cspace=`echo " "`
if [ $# -ne 0 ]
then
echo "You didn't entered a filename as a parameter"
exit
elif [ $# -eq 0 ]
then
filename="$file"
num_line=0
num_word=0
num_char=0
while read -n1 w
do
if [ "$w" = "$cnew_line" ]
then
(( num_line++ ))
elif [ "$w" = "$cspace" ]
then
(( num_word++ ))
else
(( num_char++ ))
fi
done < "$filename"
echo "Line Number = $num_line"
echo "Word Number = $num_word"
echo "Character Number =$num_char"
fi
enter code here
2 जवाब
आप शब्दों को गिनने के लिए एक सहयोगी सरणी का उपयोग कर सकते हैं, कुछ इस तरह:
$ cat foo.sh
#!/bin/bash
declare -A words
while read line
do
for word in $line
do
((words[$word]++))
done
done
for i in "${!words[@]}"
do
echo "$i:" "${words[$i]}"
done
इसका परीक्षण:
$ echo this is a test is this | bash foo.sh
is: 2
this: 2
a: 1
test: 1
यह उत्तर इन बेहतरीन उत्तरों से काफी हद तक निर्मित किया गया था: यह और यह. उन्हें अपवोट करना न भूलें।
जेम्स ब्राउन के उत्तर के दो उन्नत संस्करण, (जो विराम चिह्न को एक शब्द का हिस्सा मानता है, और दोहरे और एकल उद्धरणों के समूहों पर विराम देता है) ):
विराम चिह्न शब्द का हिस्सा माना जाता है:
#!/bin/bash declare -A words while read line ; do for word in ${line} ; do ((words[${word@Q}]++)) done ; done for i in ${!words[@]} ; do echo ${i}: ${words[$i]} done
विराम चिह्न शब्द का हिस्सा नहीं है, (जैसे
wc
):#!/bin/bash declare -A words while read line ; do line="${line//[[:punct:]]}" for word in ${line} ;do ((words[${word}]++)) done ; done for i in ${!words[@]} ;do echo ${i}: ${words[$i]} done
मुश्किल उद्धृत पाठ के साथ परीक्षण कोड:
fortune -m "swear" | bash foo.sh
man bash | ./foo.sh | sort -gr -k2 | head
संबंधित सवाल
नए सवाल
bash
बैश कमांड शेल के लिए लिखी गई लिपियों के बारे में प्रश्नों के लिए। त्रुटियों / वाक्यविन्यास त्रुटियों के साथ शेल स्क्रिप्ट के लिए, कृपया यहां पोस्ट करने से पहले शेलचेक प्रोग्राम (या वेब शेलचेक सर्वर पर https://shellcheck.net) के साथ उन्हें जांचें। बैश के इंटरैक्टिव उपयोग के बारे में सवाल स्टैक ओवरफ्लो की तुलना में सुपर उपयोगकर्ता पर ऑन-टॉपिक होने की अधिक संभावना है।