首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于查找文件中每个字母的频率的Bash脚本

问用于查找文件中每个字母的频率的Bash脚本
EN

Stack Overflow用户
提问于 2010-10-19 17:10:25
回答 5查看 18.6K关注 0票数 27

我正在尝试找出输入文件中英文字母表中每个字母出现的频率。我如何在bash脚本中做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-10-19 17:21:38

只有一条awk命令

代码语言:javascript
复制
awk -vFS="" '{for(i=1;i<=NF;i++)w[$i]++}END{for(i in w) print i,w[i]}' file

如果希望不区分大小写,请添加tolower()

代码语言:javascript
复制
awk -vFS="" '{for(i=1;i<=NF;i++)w[tolower($i)]++}END{for(i in w) print i,w[i]}' file

如果你只想要字符,

代码语言:javascript
复制
awk -vFS="" '{for(i=1;i<=NF;i++){ if($i~/[a-zA-Z]/) { w[tolower($i)]++} } }END{for(i in w) print i,w[i]}' file

如果您只需要数字,请将/[a-zA-Z]/更改为/[0-9]/

如果不想显示unicode,请使用export LC_ALL=C

票数 24
EN

Stack Overflow用户

发布于 2010-10-19 20:03:10

我的解决方案是使用grep、sort和uniq。

代码语言:javascript
复制
grep -o . file | sort | uniq -c

忽略大小写:

代码语言:javascript
复制
grep -o . file | sort -f | uniq -ic
票数 28
EN

Stack Overflow用户

发布于 2010-10-19 17:28:59

基于sed、sort和uniq的解决方案

代码语言:javascript
复制
sed 's/\(.\)/\1\n/g' file | sort | uniq -c

这将计算所有字符,而不仅仅是字母。您可以使用以下命令进行过滤:

代码语言:javascript
复制
sed 's/\(.\)/\1\n/g' file | grep '[A-Za-z]' | sort | uniq -c

如果您想考虑大小写相同,只需添加一个翻译:

代码语言:javascript
复制
sed 's/\(.\)/\1\n/g' file | tr '[:upper:]' '[:lower:]' | grep '[a-z]' | sort | uniq -c
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3966820

复制
相关文章

相似问题

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