* 显示最常用的命令

** 原始脚本

  1. $ history | \
  2. > awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | \
  3. > sort -rn | \
  4. > head -n 10


从上面可以看出来,这个脚本分为五步,最核心的就是awk处理的那块。


首先,history命令列出存储在~/.bash_history中存储的所有命令,其基本格式如下:



  1. : ~$ history | head -n 1
  2. : 1 rm -r test/


接着,使用awk处理。我们仔细分析一下,在awk中,它首先将每个记录的第二个
字段作为数组的下标,接着加1。每次遇到同样的字段,就自加1。这样a[]中存着
每个命令的出现次数。当awk处理完毕所有记录后,进入END。END块打印数组和它
的值,其格式如下:


  1. ~$ history | awk '{a[$2]++} END{for(i in a){print a[i] " " i}}' | head -n 3
  2. 2 ln
  3. 1 ./backup
  4. 1 grep

其中第一个字段表示该命令出现的次数。


当awk将所有的命令处理完毕之后,将其重定向到sort,由sort进行排序。
sort -rn 意思就是以数字进行正向排序。


最后,由head命令输出前十个常用命令。


输出结果:

  1. 97 ls
  2. 78 history
  3. 71 cd
  4. 19 cat
  5. 18 echo
  6. 15 gcc
  7. 11 man
  8. 10 passwd
  9. 8 sed
  10. 6 ./guanji


** 改进后




  1. $ history | \
  2. > sed 's/\.\///' | \
  3. > awk '{a[$2]++}END{for(i in a){print a[i] "\t" i "\t" a[i]/$HISTSIZE "%"}}' | \
  4. > sort -rn | \
  5. > head -n 10


其输出如下:


  1. 97ls0.235437%
  2. 76history0.184466%
  3. 71cd0.17233%
  4. 19cat0.0461165%
  5. 18echo0.0436893%
  6. 15gcc0.0364078%
  7. 11man0.026699%
  8. 10passwd0.0242718%
  9. 8sed0.0194175%
  10. 6guanji0.0145631%

*** 改进项目

1.使用sed去掉./开头的命令

2.显示每个命令的使用频率

3.使用\t使输出更加美观
09-15 03:28