* 显示最常用的命令
** 原始脚本
- $ history | \
- > awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | \
- > sort -rn | \
- > head -n 10
从上面可以看出来,这个脚本分为五步,最核心的就是awk处理的那块。
首先,history命令列出存储在~/.bash_history中存储的所有命令,其基本格式如下:
- : ~$ 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
** 改进后
- $ 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.使用sed去掉./开头的命令
2.显示每个命令的使用频率
3.使用\t使输出更加美观