复习——查看历史命令前十

来源:互联网 发布:曼哈顿软件 招聘 编辑:程序博客网 时间:2024/06/06 19:41

  呃,其实这是一个很久很古老的话题了。之所以拿来写篇博客,是为了让自己一定一定要记住cut/sort/uniq/tr/sed的用法,别再忘了……(拜托我自己,记性好点儿吧……)
  首先,查看自己所有用过的命令历史记录,发现只有这一点儿……

lgl@pArch ~ $ cat .bash_history pacman -S zshsudo pacman -S zshexit cd /home/lgl clearlsexit

  恩,我是一开始就装了zsh,后来就不用bash了……所以我应该查看.zsh_history来着。

: 1442485127:0;ls: 1442485132:0;exit: 1442485144:0;sudo pacman -Syu: 1442485151:0;exit: 1442485188:0;sudo pacman -S texlive-lang: 1442485439:0;pacman -Ss font: 1442485537:0;pacman -S wqy-microhei: 1442485544:0;sudo pacman -S wqy-microhei: 1442485562:0;sudo pacman -Ss ttf......

  对,就是它,但是在命令前面怎么有一堆奇奇葩葩的东西……还是先搞掉吧。
  最开始,我想使用cut把命令那一块儿切出来,但是cut的delimiter不支持多种,没办法,先用sed把所有的冒号和分号都换成空格:

lgl@pArch ~ $ sed 's/[:;]/ /g' .zsh_history | head                                                    1442485127 0 ls  1442485132 0 exit  1442485144 0 sudo pacman -Syu  1442485151 0 exit  1442485188 0 sudo pacman -S texlive-lang  1442485439 0 pacman -Ss font  1442485537 0 pacman -S wqy-microhei  1442485544 0 sudo pacman -S wqy-microhei  1442485562 0 sudo pacman -Ss ttf  1442485584 0 sudo pacman -S ttf-arphic-ukai

  没啥问题,然后再用cut把命令那一块儿切出来:

lgl@pArch ~ $ sed 's/[:;]/ /g' .zsh_history | cut -d ' ' -f 5 | headlsexitsudoexitsudopacmanpacmansudosudosudo

  也没问题,再用uniq -c(-c count)去重并统计频率,由于uniq只能去重连续的行,所以要先用sort -d(-d dictionary)按照字典序把整体排一下,相同行就变成连续的了,再去重并统计,最后再把统计后的内容按照频率从大到小(默认是从小到大,所以从大到小排列就是逆序排列了)排序sort -nr(-n numeric -r reverse),最后用head命令输出前十个就行了:

lgl@pArch ~ $ sed 's/[:;]/ /g' .zsh_history | cut -d ' ' -f 5 | sort -d | uniq -c | sort -nr | head   1093 sudo    606 ls    517 git    506 exit    463 cd    336 pacman    308 cat    202 shutdown    186 gpg    149 yaourt

  用的最多的是sudo,估计有很大一部分是sudo pacman,其实本来是用pacman指令啦,不过无所谓了。
  另外,在用完sed将冒号和分号全都替换成空格之后,会出现连续的空格,这样再用cut切命令名的时候将会不方便,所以可以用tr -s ' '(-s, –squeeze-repeats压榨重复)将连续的空格“压榨”成一个空格:

lgl@pArch ~ $ sed 's/[:;]/ /g' .zsh_history | tr -s ' ' | head 1442485127 0 ls 1442485132 0 exit 1442485144 0 sudo pacman -Syu 1442485151 0 exit 1442485188 0 sudo pacman -S texlive-lang 1442485439 0 pacman -Ss font 1442485537 0 pacman -S wqy-microhei 1442485544 0 sudo pacman -S wqy-microhei 1442485562 0 sudo pacman -Ss ttf 1442485584 0 sudo pacman -S ttf-arphic-ukai

  这样的话不会再有连续的空格了,方便多了。当然,如果想数起来更方便,不如把开头的空格也去掉,使用sed 's/^ //g'

lgl@pArch ~ $ sed 's/[:;]/ /g' .zsh_history | tr -s ' ' | sed 's/^ //g' | head1442485127 0 ls1442485132 0 exit1442485144 0 sudo pacman -Syu1442485151 0 exit1442485188 0 sudo pacman -S texlive-lang1442485439 0 pacman -Ss font1442485537 0 pacman -S wqy-microhei1442485544 0 sudo pacman -S wqy-microhei1442485562 0 sudo pacman -Ss ttf1442485584 0 sudo pacman -S ttf-arphic-ukai

  嗯,命令所在的块儿就是第三块儿,一目了然!
  最后,希望我记性好点儿吧……

  ps:的确,很多用sudo的场合其实是在使用其他命令,而不是为了使用sudo命令本身,为此我们可以把sudo删掉之后再统计:

lgl@pArch ~ $ cat .zsh_history | sed 's/[;:]/ /g; s/sudo/ /g' | tr -s ' ' | sed 's/^ //g' | cut -d ' ' -f 3 | sort -d | uniq -c | sort -nr | head    984 pacman    615 ls    524 exit    517 git    466 cd    330 cat    234 shutdown    186 gpg    164 cp    159 yaourt

  于是pacman果然就是使用频率第一高的命令了^_^

0 0
原创粉丝点击