首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在中:如何计算文件中特定单词的出现次数

在中:如何计算文件中特定单词的出现次数
EN

Stack Overflow用户
提问于 2012-05-15 00:38:26
回答 7查看 13.8K关注 0票数 3

我的意思是任何空格分隔的字符串。

假设文件test.txt有以下以空格分隔的单词:

代码语言:javascript
运行
复制
hello hello hello hell osd
hello
hello 
hello
hellojames beroo helloooohellool axnber hello
way
how 

我想数一数单词hello出现在每一行的次数。

我使用命令awk -F "hello" '{print NF-1}' test.txt来显示单词hello在每一行中出现的次数:

代码语言:javascript
运行
复制
3
1
1
1
4
0
0

因此,它总共发现了3+1+1+1+4 = 10次。

问题是在第四行: hello只作为一个单独的单词出现1次;不应该计算hellojames和helloooohellool这样的单词,因为hello不是由空格分隔的。

因此,我希望它能找到7次出现的hello作为一个单独的词。

你能帮我写一个返回7次正确总数的命令吗?

EN

回答 7

Stack Overflow用户

发布于 2012-05-15 00:56:34

代码语言:javascript
运行
复制
awk '{ for(i=1; i<=NF; i++) if($i=="hello") c++ } END{ print c }' file.txt

如果您需要它打印每一行:

代码语言:javascript
运行
复制
awk '{ c=1; for(i=0; i<=NF; i++) if($i=="hello") c++; print c }'
票数 6
EN

Stack Overflow用户

发布于 2012-05-15 02:14:25

代码语言:javascript
运行
复制
grep -o '\<hello\>' filename | wc -l

\<\>位是字边界模式,所以表达式找不到foohellohellobar

您也可以使用awk -F '\\<hello\\>' ...实现同样的效果。

票数 3
EN

Stack Overflow用户

发布于 2012-05-15 01:52:41

解决方案:

代码语言:javascript
运行
复制
sed 's/\s\+/\n/g' test.txt | grep -w hello  | wc -l

解释:

代码语言:javascript
运行
复制
sed 's/\s\+/\n/g' text.txt

这将用换行符替换每一个空格,有效地重新格式化文件test.txt,使其每行只有一个单词。sed 's/FIND/REPLACE/g'命令将FIND模式替换为随处可见的REPLACE模式。模式\s\+的意思是“一个或多个空白字符”,而\n是一个换行符。

代码语言:javascript
运行
复制
grep -w hello

这只提取那些包含hello作为完整单词的行。

代码语言:javascript
运行
复制
wc -l

这将计算行数。

如果要计算每行发生的次数,可以使用相同的技术,但一次只处理一行:

代码语言:javascript
运行
复制
while read line; do
  echo $line | sed 's/\s\+/\n/g' | grep -w hello  | wc -l
done < test.txt
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10592803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档