zsh-history からコマンドの実行回数を出す
何度か書いているのですが、書き直してみました。書き方のスタイルが変わっていってます。(^^;
元ネタは以下のものです。
ここで、'setopt share_history' されている場合に ';' 前を削除しているのですが、かなり決め打ちです。このままでは最長一致でマッチする箇所を引っ掛けてしまいますので、実際には zsh の仕様を把握した上で作りこむ必要があるでしょう。
#! /usr/bin/gawk -f # zsh_stat.awk - stat history of zsh # input: ~/.zsh_history # output: stat result of ~/.zsh_history # usage: gawk -f zsh_stat.awk BEGIN { # set ~/.zsh_history zsh_hist_file = ENVIRON["HOME"] "/.zsh_history"; # read ~/.zsh_history while (getline < zsh_hist_file > 0) { if ($1 == ":") { sub(/^.*[0-9];/, ""); } comm_hist[$1]++; } close(zsh_hist_file); # generate array for sorting for (i in comm_hist) { sort_line[++j] = sprintf("%4d %s", comm_hist[i], i); } # array sort asort(sort_line); # print reverse for (i = j; i > 0; i--) { print sort_line[i]; } }
実行結果はこんな感じでした。
$ gawk -f zsh_stat.awk | head 265 sudo 113 cd 53 gawk 44 ls 44 less 44 cat 38 wget 38 rm 37 emacs 35 mplayer
Pocketworkstation の立ち上げ中ということもあり、sudo が圧倒的でした。