一个shell脚本的分析(1)

一个shell脚本的分析(1)


Table of Contents

  • 1 显示最常用的命令
    • 1.1 原始脚本
    • 1.2 改进后
      • 1.2.1 改进项目


1 显示最常用的命令


1.1 原始脚本

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



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


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


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


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


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


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


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


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


输出结果:


97 ls
78 history
71 cd
19 cat
18 echo
15 gcc
11 man
10 passwd
8 sed
6 ./guanji


1.2 改进后


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


其输出如下:


97      ls      0.235437%
76      history 0.184466%
71      cd      0.17233%
19      cat     0.0461165%
18      echo    0.0436893%
15      gcc     0.0364078%
11      man     0.026699%
10      passwd  0.0242718%
8       sed     0.0194175%
6       guanji  0.0145631%


1.2.1 改进项目

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

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

3.使用\t使输出更加美观




Date: 2012-09-18 二

Author: hic

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0

你可能感兴趣的:(shell,XHTML,gcc,脚本,存储,emacs)