基本的に、bash履歴に保存されている最もよく使用される10個のコマンドを出力したいのですが、それでも、いつ使用されたかを示す番号を続ける必要があります。
私はここまで到達しました:歴史| カット-f2| カット-d''-f 3,5 | ソート-k2-n
その行のコマンドからの出現回数の2番目の列を並べ替える必要があります...しかし、それは行いません。私は最後にパイプを-10に向けて、それらの上位10を取得できることを知っていますが、ソート部分に少しこだわっています。
履歴に保存されている最もよく使用される10個のコマンド:
history | sed -e 's/ *[0-9][0-9]* *//' | sort | uniq -c | sort -rn | head -10
これにより、履歴番号(sed
)、カウント(sort | uniq -c
)、頻度(sort -rn
)で並べ替え、上位10個のエントリのみが表示されるため、最もよく使用されるコマンドラインエントリが得られます。
コマンドだけが必要な場合:
history | awk '{print $2;}' | sort | uniq -c | sort -rn | head -10
これらは両方とも履歴番号を取り除きます。現在、私はそれを一行で達成する方法がわかりません。
履歴ファイルで最もよく使用されるコマンドを見つけたい場合は、履歴内のインスタンスを数える必要があります。awk
これを行うために使用できます。次のコードでは、awk
セグメントは、コマンドをキーとして、コマンドが値として表示される回数を含むハッシュテーブルを作成します。これは、そのコマンドの最後の履歴番号とともに出力され、ソートされます。
history | cut -f 2 | cut -d ' ' -f 3,5 | awk '{a[$2]++;b[$2]=$1} END{for (i in a) {print b[i], i, a[i]}}' | sort -k3 -rn | head -n 10
出力は次のようになります。
975 cd 142
972 vim 122
990 ls 118
686 hg 90
974 mvn 51
939 bash 39
978 tac 32
958 cat 28
765 echo 27
981 exit 17
最後の列が必要ない場合は、出力をパイプでつなぐことができますcut -d' ' -f1,2
。