わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

実行コマンドを数える

ふと,これまでzshの上でどんなコマンドをどれだけ実行してきたのかが,気になってきました.
コマンド履歴を保存しているファイルは,$HISTFILE です.デフォルトは ~/.zsh_history だったかな.あるいは $ZDOTDIR/.zsh_history か.
1行を取り出してみると,こんな感じ.

: 1306063912:0;emacs -nw

ということは,最初の;までを取り除いてから,最初の空白以降を取り除けば,コマンド名だけが残るわけです.
コマンド名を取り出し,数を数えてソートする,ワンライナーを書きました.

sed -e 's/^[^;]*;//' -e 's/ .*$//' $HISTFILE | sort | uniq -c | sort -nr -k 1

大量に出てきます.しかも終わりのほうの出力が変です.コマンド名の直後の空白を,ちゃんと認識してくれていないような.
細かいことは忘れることにして,上位20個のコマンド名を出すことにします.

$ sed -e 's/^[^;]*;//' -e 's/ .*$//' $HISTFILE | sort | uniq -c | sort -nr -k 1 | head -n 20
    365 ls
    362 cd
    339 svn
    195 lv
    126 \rm
    120 cat
    112 cp
     94 for
     72 mkdir
     69 grep
     66 mv
     55 rsync
     54 ruby
     50 man
     49 locate
     39 wget
     39 tar
     35 which
     34 ln
     33 w3m

「rm」ではなく「\rm」となっていますが,.zshrc.zhsrcの中で

alias rm='echo rm'

と別名定義をしていて,素のrmコマンドを実行するには\が必要だからです.