http://linux.byexamples.com/ でこの投稿を見ました
基本的に、単純な 1 行の awk スクリプトを使用します
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
完全な説明は、上記のリンクにあります。
私のマシンでの出力の例は次のとおりです:
1 211 21.1% ls
2 189 18.9% sudo
3 58 5.8% man
4 52 5.2% cd
5 43 4.3% ping
6 40 4% apropos
7 34 3.4% less
8 22 2.2% cat
9 18 1.8% which
10 18 1.8% aspell
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -n
awk コマンドは ~/.bash_history から最初の文字列を出力し (コマンドのオプションや引数は表示しません)、sort はすべての行をアルファベット順に並べ替え、次に "uniq -c" は重複した行 (入力したコマンド) を削除してそれらを数えます。最後の並べ替えでは、uniq によって返されたカウント数によってコマンドが並べ替えられます。
hash
を使用できます これは、使用するすべてのコマンドのハッシュ エントリをヒット数とともに保持し、ヒットに基づいてそれらを分類して処理できます。
詳細については、この記事を確認してください。