我的目标是计算文件中的单词数
我的输入文件如下:
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?
答案 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