1

基本上我想打印存储在 bash 历史记录中的 10 个最常用的命令,但它们仍然必须按照指示何时使用的数字进行;

我做到了这一点:历史 | 切-f 2 | 剪切-d''-f 3,5 | 排序 -k 2 -n

哪个应该从该行中的命令中对出现次数的第二列进行排序......但它没有这样做。我知道我可以在最后的管道中使用 -10 来获取其中最高的 10 个,但我有点卡在排序部分。

4

2 回答 2

9

历史中存储的 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

这两个都去掉了历史编号。目前,我不知道如何在一行中实现这一目标。

于 2012-10-29T15:47:21.917 回答
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.

于 2012-10-29T16:10:39.737 回答