关于发生次数的简短历史

时间:2012-10-29 15:40:47

标签: unix sorting history uniq

所以基本上我想打印10 最常用的命令存储在 bash历史,但他们仍然需要继续 用表示何时使用的数字;

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

哪个应该对该行中命令的出现次数的第二列进行排序......但它不会这样做。我知道我可以在最后的10个管道中占据最高的十分之一,但我有点坚持排序部分。 有什么帮助吗?

2 个答案:

答案 0 :(得分:7)

历史记录中存储的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 :(得分: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管道输出。