统计最近用过的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 |
一般人都是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:
September 3rd, 2010 at 4:11 pm
去掉前面的#!行以及注释行;改正上面中的全角引号为半角。
BTW, 这种单行程序就是在命令行下执行的,不必写到.sh文件中。
[Reply]
sudo后面的没统计
[Reply]
rex Reply:
September 17th, 2010 at 8:50 am
谢谢指正。我也发现这条命令还有待改进。例如,在 管道符 | 之后的命令,如果有空格,也会无法识别。
待我改进之。
[Reply]
aaa Reply:
September 17th, 2010 at 7:38 pm
还有xargs
其实可以想更复杂一点,比如echo “sudo man | less “
[Reply]
rex Reply:
September 17th, 2010 at 10:07 pm
有道理!不过这样一来,就成为词法分析了,估计不是一条简单的bash命令可以搞定的,呵呵。
[Reply]
其实这个统计最大的问题在于,用上下翻阅历史来用的命令好像是只算一次的。
所以ls这种短的常用的排在前面,而有些调试的时候用的命令一下午虽然运行了无数次只记录算作一次
不过这个不是实现方法的问题,是history的问题。
有点跑题了@@
[Reply]
也可以用awk
history | awk ‘{print $2}’ | sort | uniq -c | sort -k1,1rn -k2
[Reply]
rex Reply:
August 5th, 2011 at 1:54 pm
果然。 sed/awk是高级技巧。
[Reply]
我是 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]