【发布时间】:2021-11-15 14:26:28
【问题描述】:
我想计算文件中每个单词的出现次数。我不会计算一个单词是否作为另一个单词中的子字符串存在。例如,如果这个词是“in”,我不想将“inside”算作脱离世界的外观。
从我使用的文本文件中获取单词:
#Stores the words of the file without duplicates
WORDS=`grep -o -E '\w+' $1 | sort -u -f`
获取已作为命令行参数传递的文件的所有单词。
然后我用下面的命令来统计每个单词出现的次数:
#Accessing all the words from the file
for WORD in $WORDS
do
#Number of apperences of the WORD in the text file ($1)
APEARENCES=`grep -o -i "$WORD" $1 | wc -l`
***Code***
done
我的问题是APEARENCES=`grep -o -i "$WORD" $1 | wc -l` 也会计算一个单词的子字符串,如果它与"$WORD" 的字符串匹配。它将“inside”视为单词“in”的出现。
编辑:我找到了解决方案。结果我只需要在表达式中添加-w。
APEARENCES=`grep -o -i -w "$WORD" $1 | wc -l`
【问题讨论】:
-
“单词”是如何定义的?用换行符替换所有非单词字符,删除空换行符,然后排序 -u |独特的-c。用 shellcheck 检查你的脚本。不要使用反引号。
-
您可以在 grep 中添加单词分隔符(例如空格)
-
使用
awk肯定会更容易 -
你们能提供一些例子吗?我对 bash 脚本非常陌生。我几天前才开始
标签: bash bash-completion