複習——查看歷史命令前十

  呃,其實這是一個很久很古老的話題了。之所以拿來寫篇博客,是爲了讓自己一定一定要記住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果然就是使用頻率第一高的命令了^_^

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