前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一题--统计字符串出现的次数

每日一题--统计字符串出现的次数

原创
作者头像
张琳兮
修改2018-10-09 12:08:25
1.8K0
修改2018-10-09 12:08:25
举报
文章被收录于专栏:首富手记首富手记

使用awk统计出来指定字符串中重复出现的字符并重复出现了几次,现在只考虑有数字和字母,先区分大小写 eg: aaabbc------> a 重复出现3次,b重复出现了2次 abababdcac--> a 重复出现了4次,b重复出现了3次,c重复出现了2次

第一个里程碑: 先不考虑样式和要求,先输出所有字符串出现的次数

//我们先使用awk把单个字符串取出来
[root@web01-7 /]# echo "aaabbc" | awk -F "" '{$1=$1;print $0}'
a a a b b c
//$1=$1我们可以发现他其实里面的原始值没有变,但是我们这样写就是为了让awk的数据重构
[root@web01-7 /]# echo "aaabb" | awk -F  "" '{for(i=1;i<=NF;i++){sum[$i]++}}END{for(j in sum)print sum[j],j}' 
3 a
2 b
1 c
//使用awk数据求和来取出每个字母出现的次数,并输出

第二个里程碑: 把重复出现2次以上的给打印出来,只出现1次的不打印

[root@web01-7 /]# echo "aaabbc" | awk -F  "" '{for(i=1;i<=NF;i++){sum[$i]++}}END{for(j in sum)if(sum[j]>=2)print sum[j],j}' 
3 a
2 b

第三个里程碑 按照题目要求的格式化输出

echo "aaabbc" | awk -F  "" '{for(i=1;i<=NF;i++) {sum[$i]++}} END{{ for (j in sum) if ( sum[j]>=2 ) printf"%s重复出现%s次\t",j, sum[j]} printf"\n"}'

进阶版:不区分大小统计(应该能简化??)

[root@web01-7 /]# echo "AAaaabbc" | awk '{print tolower($0)}' | awk -F  "" '{for(i=1;i<=NF;i++) {sum[$i]++}} END{{ for(j in sum) if ( sum[j]>=2 ) printf"%s 重复出现%次 \",j, sum[j]} printf"\n"}'                      
a重复出现5次    b重复出现2次

总结

1,awk可以使用-F "" 这种方式来分割单个字符 2,awk中可以使用函数tolower()把所有大写的字母替换成小写的 3,awk中可以使用函数toupper()把所有小写的字母替换成大写的 4,也可以使用BEGIN{IGNORECASE=1}来屏蔽awk匹配的时候区分大小写,要记得这个在awk的兼容模式下不能用

有简单的方法希望指出

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 有简单的方法希望指出
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档