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

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

lgl@pArch ~ $ cat .bash_history 
pacman -S zsh
sudo pacman -S zsh
exit
 cd /home/lgl
 clear
ls
exit

  恩,我是一开始就装了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 | head
ls
exit
sudo
exit
sudo
pacman
pacman
sudo
sudo
sudo

  也没问题,再用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' | 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

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

  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果然就是使用频率第一高的命令了^_^

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章