【问题标题】:Sort history on number of occurrences按出现次数排序历史记录
【发布时间】:2012-10-18 23:00:40
【问题描述】:

基本上我想打印 10 最常用的命令存储在 bash 历史,但仍需继续 由表明何时使用的数字;

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

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

【问题讨论】:

  • 尝试使用sort -k2n | uniq -c | sort -k1nr | head -10(或您喜欢的任何数字)进行扩展。这将在我们的输出中留下uniq -c部分生成的计数。删除或更改head -10中的值以查看变化大量的历史记录。(我现在没有时间测试)祝你好运。

标签: unix sorting history uniq


【解决方案1】:

你历史中最常用的 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

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

【讨论】:

    【解决方案2】:

    如果您想在历史记录文件中查找最常用的命令,则必须计算历史记录中的实例。 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 管道输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 2011-05-16
      • 2014-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多