Linux: Shell编程中的应用之基于sh举行数据统计

[复制链接]
发表于 2026-1-4 21:11:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
应用场景


  • 对一个英语字典做统计
  • 统计字符出现最多,并举行排序输出
实现思绪

  • 这里必要

    • 统计每个字母出现的次数 grep 下令
    • 小写转大写

  • 可以先在下令行实验

    • $ grep -i a words.txt

      • -i 忽略巨细写
      • 这里每一行大概包罗不止一个匹配的字母

    • $ grep -io a words.txt

      • -o 只体现匹配行中不为空的匹配部分,如许的部分被单独体现在一行上
      • 为了统计某个字母的全部统计,必要加 -o

    • $ grep -io a words.txt | wc -l 统计行数

      • 这里会有一个行数的数字输出
      • 可以对比 不加 o 参数的区别,输出肯定是少的

    • 继承在终端中输入实验

      • $ for char in {a..z}; do
      • > grep -io "$char" words.txt | wc -l
      • > done

    • 之后按下回车,变会输出几行数字

  • 以上是我们的思绪
情况准备

1 )字典集 words.txt
部分信息展示如下:
  1. aa
  2. aaa
  3. aah
  4. aahed
  5. aahing
  6. aahs
  7. aal
  8. aalii
  9. aaliis
  10. aals
  11. aam
  12. aardvark
  13. aardvarks
  14. ... 后续过多,不便在此展示
复制代码
此文件资源在文章顶部可举行下载
2 ) 脚本准备
$ vim statistics.sh
  1. #!/bin/bash
  2. # Verification of parameter
  3. # 确认参数, 不存在参数,则提示并退出
  4. if [ -z $1 ]
  5. then
  6.     echo "Please enter the file of dictionary !"
  7.     exit
  8. fi
  9. # Verification of file existence
  10. # 确认文件存在
  11. if [ ! -e $1 ]
  12. then
  13.     echo "Please make sure that the file of dictionary exists !"
  14.     exit
  15. fi
  16. # Definition of function
  17. # 函数定义
  18. statistics () {
  19.   # 遍历 a ~ z 中间的 26 个字母
  20.   for char in {a..z}
  21.   do
  22.           # tr 命令是 translate 的缩写,用于转化或删除字符
  23.           # tr /a-z/ /A-Z/ 表示将所有的小写字母转化为对应的大写字母
  24.     echo "$char - `grep -io "$char" $1 | wc -l`" | tr /a-z/ /A-Z/ >> tmp.txt
  25.   done
  26.   # 使用 sort 命令对 tmp.txt 文件中的行进行排序
  27.   # -r 倒序排列,-n 对数字排序,-k 指定根据哪几列进行排序,-t 指定列之间的分隔符
  28.   sort -rn -k 2 -t - tmp.txt
  29.   rm tmp.txt
  30. }
  31. # Use of function
  32. # 函数使用
  33. statistics $1
复制代码
授权实行:$ chmod +x statistics.sh
实行:$ ./statistics.sh words.txt
终极输出结果
  1. E - 363325
  2. I - 297800
  3. A - 273400
  4. S - 245420
  5. N - 242172
  6. O - 241766
  7. R - 237931
  8. T - 223998
  9. L - 187617
  10. C - 146090
  11. U - 126597
  12. P - 109040
  13. D - 108173
  14. M - 99955
  15. H - 86490
  16. G - 80206
  17. Y - 67946
  18. B - 61975
  19. F - 38763
  20. V - 32467
  21. K - 25618
  22. W - 22053
  23. Z -13932
  24. X - 10112
  25. Q - 5696
  26. J - 5073
复制代码

  • 大概的优化

    • 除了一个参数,也就是要统计的字典文件的名字
    • 还可以添加其他参数来完成更多任务
    • 可以改变输出的情势,使之更雅观
    • 每一行大概输出更多信息
    • 实验不借助中心文件 tmp.txt
    • …

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表