Counting characters, words, length of the words and total length in a sentence

后端 未结 7 1932
别跟我提以往
别跟我提以往 2021-02-20 15:08

I have to write a script that takes a sentence and prints the word count, character count (excluding the spaces), length of each word and the length. I know that there exist

相关标签:
7条回答
  • 2021-02-20 15:35
    string="i am a string"
    
    n=$(echo $string | wc -w )
    
    echo $n
    
    4
    

    The value of n can be used as an integer in expressions

    eg.
    
    echo $((n+1))
    5
    
    0 讨论(0)
  • 2021-02-20 15:39

    You are very close. In bash you can use # to get the length of your variable.

    Also, if you want to use bash interpreter use bash instead of sh and the first line goes like this -

    #!/bin/bash

    Use this 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
    
    0 讨论(0)
  • 2021-02-20 15:43

    code

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

    output

    3
    
    0 讨论(0)
  • 2021-02-20 15:45
    echo $mystring | wc -w
    

    or

    echo $mystring | wc --words
    

    will do a word count for you.

    You can pipe each word to wc:

    echo $token | wc -m
    

    to store the result in a variable:

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

    to add to the total as you go word by word, do math with this syntax:

    total=0
    #start of your loop
    total=$((total+mycount))
    #end of your loop
    echo $total
    
    0 讨论(0)
  • 2021-02-20 15:49

    riffing on Jaypal Singh's answer:

    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
    
    0 讨论(0)
  • 2021-02-20 15:50

    The wc command is a good bet.

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

    where the result is number of lines, words and characters. In a 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"
    

    The declare built-in casts a variable as an integer here, so that += will add rather than append.

    $ ./doit
    lines: 1
    words: 5
    chars: 24
    word lengths: 3 3 5 4 4
    nonspace chars: 19
    
    0 讨论(0)
提交回复
热议问题