Bash统计文本文件单词出现次数(排除子字符串匹配)
文本单词出现次数统计方案
需求
统计文本文件中每个单词的出现次数,要求不统计作为子字符串出现在其他单词内部的匹配结果,例如待统计单词是「in」时,不能将「inside」算作「in」的匹配结果。
初始实现
第一步:获取去重单词列表
先通过如下命令获取命令行参数传入的文本文件中所有去重后的单词:
# 存储文件去重后的单词列表 WORDS=`grep -o -E '\w+' $1 | sort -u -f`
第二步:循环统计单词出现次数
遍历单词列表,统计每个单词的出现次数,初始代码如下:
# 遍历所有单词 for WORD in $WORDS do # 统计单词WORD在文本文件($1)中的出现次数 APEARENCES=`grep -o -i "$WORD" $1 | wc -l` ***其他业务逻辑代码*** done
存在的问题
初始代码中的统计命令 grep -o -i "$WORD" $1 | wc -l 会把单词内部的子字符串匹配也计入统计结果,比如会将「inside」算作单词「in」的一次出现,不符合需求。
解决方案
在grep命令中添加 -w 参数即可,-w 参数会强制匹配完整的独立单词,不会匹配子串场景,修改后的命令如下:
APEARENCES=`grep -o -i -w "$WORD" $1 | wc -l`
内容的提问来源于stack exchange,提问作者Simos Neopoulos
相关产品推荐
相关产品推荐

