统计最近用过的linux命令

August 31st, 2010 Categories: 笔记

统计最近用过的linux命令。没什么具体用途,练习bash而已。

流程:

  • history 命令中得到最近1000条命令。
  • 删除每行的行号。
  • 记录每一行中的命令。行首的第一个英文单词,以及管道后面的第一个英文单词,视为命令名称。
  • 将得到的命令列表排序。
  • 统计每个命令的出现次数,先以次数降序排列,再以命令名称升序排列。

完整的命令为:history | sed "s#^\s\+[0-9]\+\s\+##g" | grep -oP "(?<=^|\|)\w+"|sort |uniq -c| sort -k1,1nr -k2

以下是本人的ubuntu命令显示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    157 ls
    134 cd
     89 pcregrep
     76 cat
     56 xargs
     52 python
     49 vim
     47 sudo
     46 git
     44 exit
     37 rename
     28 echo
     27 sed
     27 tstp
     26 adt
     26 grep
     19 curl
     18 rm
     16 history
     16 wget
     12 ps
     10 kill
     10 make
     10 perl
      8 ll
      8 mv
      8 scp
      8 sfo
      7 ctags
      7 tst
      6 awk
      6 gvim
      6 mkdir
      6 sort
      4 chmod
      4 man
      4 uniq
      3 cjb
      3 md5sum
      3 tt
      3 vmxp
      3 which
      2 chown
      2 ctag
      2 docky
      2 ex
      2 ks
      2 pyton
      2 set
      2 tar
      1 bc
      1 cdcd
      1 cp
      1 cpanm
      1 date
      1 efr
      1 firefox
      1 gawk
      1 gi
      1 less
      1 lua
      1 PWD
      1 re
      1 sleep
      1 tpo
      1 unzip
      1 vi
      1 vm
      1 xarg
Tags:

11 Responses to “统计最近用过的linux命令”

  1. 可可火山
    September 3rd, 2010 at 12:45
    1

    一般人都是ls用最多那。 有个奇怪的问题,我自己写了个脚本去运行,怎么没结果的?
    #!/bin/bash
    # * 从 history 命令中得到最近1000条命令。
    # * 删除每行的行号。
    # * 记录每一行中的命令。行首的第一个英文单词,以及管道后面的第一个英文单词,视为命令名称。
    # * 将得到的命令列表排序。
    # * 统计每个命令的出现次数,先以次数降序排列,再以命令名称升序排列。
    history | sed “s#^\s\+[0-9]\+\s\+##g” | grep -oP “(?<=^|\|)\w+"|sort |uniq -c| sort -k1,1nr -k2

    运行后没结果,奇怪~

    [Reply]

    rex Reply:

    去掉前面的#!行以及注释行;改正上面中的全角引号为半角。

    BTW, 这种单行程序就是在命令行下执行的,不必写到.sh文件中。

    [Reply]

  2. aaa
    September 16th, 2010 at 18:22
    2

    sudo后面的没统计

    [Reply]

    rex Reply:

    谢谢指正。我也发现这条命令还有待改进。例如,在 管道符 | 之后的命令,如果有空格,也会无法识别。

    待我改进之。

    [Reply]

    aaa Reply:

    还有xargs

    其实可以想更复杂一点,比如echo “sudo man | less “

    [Reply]

    rex Reply:

    有道理!不过这样一来,就成为词法分析了,估计不是一条简单的bash命令可以搞定的,呵呵。

    [Reply]

  3. February 6th, 2011 at 11:40
    3

    其实这个统计最大的问题在于,用上下翻阅历史来用的命令好像是只算一次的。
    所以ls这种短的常用的排在前面,而有些调试的时候用的命令一下午虽然运行了无数次只记录算作一次

    不过这个不是实现方法的问题,是history的问题。

    有点跑题了@@

    [Reply]

  4. Armon
    July 28th, 2011 at 09:26
    4

    也可以用awk
    history | awk ‘{print $2}’ | sort | uniq -c | sort -k1,1rn -k2

    [Reply]

    rex Reply:

    果然。 sed/awk是高级技巧。

    [Reply]

  5. January 31st, 2012 at 02:29
    5

    我是 vim 最多 – -+
    224 vim
    188 ls
    116 cd
    92 fg
    72 make
    54 ./exe/context.o
    47 screen
    37 sudo
    25 exit
    17 grep
    14 time
    11 history
    11 pwd
    8 ./configure
    7 mkdir
    7 sh
    6 source
    4 cp

    [Reply]

1 trackbacks

Leave a Comment

如何在本站贴代码?

可以使用任意语言名称代替“python”.