unixコマンドの使用頻度を計測する
背景
2015年08月に書きました.
大学で「unixコマンドの自分用のマニュアルを書け」という正直言って謎な課題が出たためです.
そのためにまず自分の使っているコマンドを計測するために.zsh_history
の内容を解析することにしました.
最初は当初学んでいたerlangで解析しようとしましたが,
文字列操作がわけわかめで疲れてやめました.
ソースコード
純粋なunixコマンドだけではなくalias
やfunction
も計測したいため,
自分のncaq/.zsh.dを読み込んで,
定義されてあるコマンドやalias
をまず抽出するようにしてあります.
当初はzsh側でtype
で存在を確認しようと思いましたがどう考えても重すぎるため却下.
その後にhistoryのテキストを単語ごとに分割してコマンドっぽいものを抽出すればsudo
で指定されたaliasも出て良い.
実行結果
これを書いた当時の実行結果
7357: "eix"
7150: "ll"
3803: "sudo"
2517: "p"
1739: "git"
1467: "t"
1377: "echo"
1339: "m"
1312: "make"
1292: "man"
1229: "cat"
1221: "ssh"
930: "equery"
803: "gs"
781: "u"
648: "mv"
620: "rm"
614: "ag"
573: "f"
562: "parallel"
553: "tree"
550: "install"
534: "cp"
521: "eselect"
507: "ls"
454: "z"
438: "sds"
418: "ip"
375: "mount"
354: "firefox"
342: "find"
341: "cabal"
332: "x"
317: "systemctl"
315: "c"
現在の実行結果
% runhaskell CommandRank.hs|head -n 50
1018: "stack"
905: "ll"
543: "eix"
376: "p"
366: "sudo"
364: "ruby"
294: "d"
255: "npm"
199: "gs"
169: "m"
148: "git"
139: "echo"
134: "t"
133: "nmcli"
115: "w"
109: "off"
105: "x"
102: "equ"
98: "c"
97: "eselect"
88: "make"
85: "mv"
72: "install"
67: "ghc"
65: "rm"
57: "sdr"
54: "NetworkManager"
53: "tree"
50: "yesod"
49: "mudn"
49: "pactl"
48: "cp"
46: "ge"
44: "mudnbw"
44: "pavucontrol"
39: "ag"
39: "cat"
39: "eix-sync"
39: "test"
37: "gp"
37: "mosh"
36: "u"
35: "ga"
35: "gc"
35: "mikutter"
33: "emacs"
33: "fc-match"
31: "ghci"
31: "mount"
30: "tidy"
解析評価
明らかにコマンドラインパラメータなのが混ざっているのはご愛嬌.
こうしてみると大部分は設定したaliasと一部の開発用ツールでコマンドは埋まっていることがわかります.
2年前と使ってるツールはあまり変わってないですね,
cabal
がstack
に変化したのが1番大きな変化でしょうか.
unixは枯れていてそこが魅力です.