【发布时间】:2018-06-01 12:07:26
【问题描述】:
我在下面给出了代码。我想在不使用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
【问题讨论】:
-
在纯 Bash 中执行此操作是一种极其低效且笨拙的工具使用方式。你能解释一下为什么你想在一个不太适合这项任务的环境中这样做吗?此外,您的代码缺少缩进并在shellcheck.net 上触发了许多警告。在这里寻求帮助之前,你应该先把这些东西弄好。
-
用
IFS=$'\n'为IFS分配一个换行符,然后在下一行以错误的方式再次执行,这表明您并不真正了解自己的代码。提示:cnew_line最终不会包含换行符。