zoukankan      html  css  js  c++  java
  • 每日一题统计指定的字符串

    题目15统计字符串

    使用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的兼容模式下不能用

  • 相关阅读:
    如何使用Eclipse和GCC搭建STM32环境
    增量式pid和位置式PID参数整定过程对比
    webrtc 源码结构
    小米路由器刷Xiaomi Mi WiFi Mini openwrt
    js jQuery 右键菜单 清屏
    沉默的大多数 (王小波)
    kindle书摘-活着-余华-活着不易,珍惜
    kindle书摘-围城-相爱勿相伤
    Nagios系列1,选择
    红楼梦人物关系图,一代大师成绝响,下回分解待何人,kindle读书摘要
  • 原文地址:https://www.cnblogs.com/shoufu/p/9758506.html
Copyright © 2011-2022 走看看