计算shell脚本

时间:2015-12-12 16:08:41

标签: bash

我的目标是计算文件中的单词数

我的输入文件如下:

100,Surender,CTS
101,Kumar,TCS
102,Raja,CTS
103,Vijay,TCS

预期答案是12

我为此编写的shell脚本位于

之下
let total_no_of_words=0;
while read each_line ;

do

   words=`echo $each_line | tr "," " " |wc -w`
   total_no_words=`expr $total_no_words + $words`

done < /home/user/surender/linux/inputfiles/records.txt;

echo $total_no_of_words

但是按照上面的脚本,我得到的输出是0。 如果我在循环中保留变量$ total_no_words然后它给出累积字数,例如3 6 9 12

我需要做什么才能将输出设为12?

4 个答案:

答案 0 :(得分:1)

这是一个简单的错字

total_no_of_words=`expr $total_no_of_words + $words`

答案 1 :(得分:0)

您可以使用awk:

awk -F, '{n+=NF}END{print n}' file

我使用,作为字段分隔符(在您的上下文中为 word 分隔符),并将每行的字数添加到变量n。处理完所有行后,我会打印n

的值

我会在这里使用awk,但出于好奇,如果你想使用wc来计算单词,我会使用grep将每个单词放在一行并计算行数: / p>

grep -o '[^,]\+' file | wc -l

你也问过如何使用while循环。你可以这样做:

while read word ; do
    n=$((n+1))
done < <(grep -o '[^,]\+' file)
echo "$n"

但无论如何,请使用awk! :)

答案 2 :(得分:0)

您可以使用sed

cat your_file.txt | sed 's/[[:punct:]]\+/\n/g' |wc -l
12

your_file.txt

100,Surender,CTS
101,Kumar,TCS
102,Raja,CTS
103,Vijay,TCS

答案 3 :(得分:0)

简化脚本的另一种方法是将每一行读入一个数组,然后将得到的数组长度相加。

total_no_of_words=0
while read -a each_line; do
    (( total_no_of_words += ${#each_line[@]} ))
done < /home/user/surender/linux/inputfiles/records.txt;

echo $total_no_of_words