Home

技術系のメモと日々の雑感

コマンドを実行した回数をカウント

ちょっと前に hash コマンドを使えば外部コマンドの実行回数が分かるという話を書いたけど。
これだけだとあまり使い道がないし、だったら組み込みコマンドの実行回数も含めて何とかならんのかと思うのが人情というもの。
ということで、かなり適当だけど perl で書いてみた。

#!/usr/bin/perl
open(IN, "$ENV{'HOME'}/.bash_history") || die "Open Error";
@line = <IN>;
close(IN);
@line = sort(@line);
$i = $j = 0;
while($line[$i]){
  chomp($line[$i]);
  @command = split(/ +/, $line[$i]);
  if($cmd eq $command[0]){
    $cnt++;
  }else{
    print "$cnt $cmd¥n" if($i > 0);
    $cmd = $command[0];
    $cnt = 1;
  }
  $i++;
}
print "$cnt $cmd¥n";

実行するとこんな感じ。(抜粋)

$ ./hoge.pl
8 cat
89 cd
4 chmod
3 cp
2 df
4 echo

実行回数が多いものから表示するなら

$ ./hoge.pl | sort -nr

と実行すればいい。
見ての通り .bash_history を読んでいるので、環境変数 HISTFILESIZE の値が小さいとあんまり楽しくない。
本当は .bash_history ではなく history コマンドの出力をそのまま使いたかったんだけど

open(IN, "history |") || die "Open Error";

とすると通らなかった。
組み込みコマンドは駄目なのかと思ったらそうでもなさそうだし。
なんでだろ。

この記事に対するトラックバック

この記事のトラックバックURL

-

管理人の承認後に表示されます

  • From: |
  • 2013/10/23(水) 14:34:54

-

管理人の承認後に表示されます

  • From: |
  • 2013/08/24(土) 12:52:35

-

管理人の承認後に表示されます

  • From: |
  • 2013/07/14(日) 00:38:41

-

管理人の承認後に表示されます

  • From: |
  • 2013/07/08(月) 10:47:55

この記事に対するコメント

承認待ちコメント

このコメントは管理者の承認待ちです

  • 投稿者: -
  • 2011/02/27 20:14:11
  • [編集]

別解

ある人から教えてもらった別解。
history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 10

この記事にコメントする

管理者にだけ表示を許可する