使用命令或者shell列出history常用命令排名前面10

回复 收藏
无意发现的一个脚本,对方写的脚本,我实在是没怎么看懂,麻烦高手翻译下
  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
一台机器执行以后等到结果如下
290        ls        0.271536%
171        cd        0.160112%
60        cat        0.0561798%
45        vim        0.0421348%
40        rm        0.0374532%
35        vi        0.0327715%
30        exit        0.0280899%
30        chmod        0.0280899%
25        du        0.0234082%
18        ll        0.0168539%


由于我实在是看不懂他的这个语法结构,所以自己也写了一个
  1. cat .bash_history |grep ^[a-z].*[a-z]$ |awk '{print $1 }' |sort -n |uniq -c |sort -rn |head -10

得到的结果如下
    268 ls
     31 cat
     30 exit
     18 cd
     17 ll
     16 top
     13 vi
     12 vim
     10 rm
      8 du

我的语法应该比较容易看的懂,我还是注释下吧
#通过cat打开历史记录
#只取是字母开头和结尾行(有些命令不是以字母开头)
#awk截取第一列(也就是命令本身,忽略了参数)
#使用sort 安装数字排序
#使用uniq去重并显示重复次数
#再次使用sort排序,将使用次数多的排在前面
#使用head 取出前面10行


和他的原始输入有差距,估计是在grep的截取的数据差异导致的,你们可以自己对比下
2016-05-23 16:52 举报
已邀请:
0

ggangelo

赞同来自:

history|awk '{s[$2]++}END{for(i in s){print s【i】,i,s【i】/$HISTSIZE" %"}}'|sort -rn|head


数组s【i】表示累积次数,i表示命令字符串

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: