2012-10-29 35 views
1

所以基本上我想打印存儲在 bash歷史中的最常用的命令,但仍然必須按照指示何時使用它的數字進行編號 ;對發生次數的排序歷史

我到目前爲止: 歷史| cut -f 2 |切-d''-f 3,5 | sort -k 2 -n

哪個應該排序該行命令中出現次數的第二列......但它不這樣做。我知道我可以在最後拿到最高的10個,但我有點被分類部分困住了。 有什麼幫助嗎?

+0

嘗試使用'sort -k2n | uniq -c | sort -k1nr |頭-10「(或者你喜歡的數字,這會在我們的輸出中留下'uniq -c'部分產生的計數,移除或改變'head -10'中的值以查看不同的歷史數量。現在沒有時間測試)祝你好運。 – shellter

回答

6

存儲在歷史上10個最常用的命令:

history | sed -e 's/ *[0-9][0-9]* *//' | sort | uniq -c | sort -rn | head -10 

這給你最常用的命令行條目通過刪除歷史編號(sed),計數(sort | uniq -c),通過頻率排序(sort -rn)並只顯示前十名的條目。

如果你只是想單純的命令:

history | awk '{print $2;}' | sort | uniq -c | sort -rn | head -10 

的這兩個剝離歷史編號。目前,我不知道如何實現這一目標。

1

如果你想在你的歷史文件中找到最常用的命令,你將不得不對歷史中的實例進行計數。 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