Chinaunix首页 | 论坛 | 博客
  • 博客访问: 893475
  • 博文数量: 113
  • 博客积分: 3160
  • 博客等级: 少校
  • 技术积分: 1801
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-19 10:09
文章分类

全部博文(113)

分类: Python/Ruby

2012-09-18 18:02:01

* 显示最常用的命令

** 原始脚本

  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. 97 ls 0.235437%
  2. 76 history 0.184466%
  3. 71 cd 0.17233%
  4. 19 cat 0.0461165%
  5. 18 echo 0.0436893%
  6. 15 gcc 0.0364078%
  7. 11 man 0.026699%
  8. 10 passwd 0.0242718%
  9. 8 sed 0.0194175%
  10. 6 guanji 0.0145631%

*** 改进项目

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

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

3.使用\t使输出更加美观
阅读(4842) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

szpingbixiang2012-10-06 10:30:50

顶顶、、、、