一个shell脚本的分析(1)

本文详细解析了一个用于分析最常用命令的Shell脚本,并对其进行了优化,包括使用sed处理命令,显示每个命令的使用频率及美化输出。通过awk、sort和head等命令实现了高效的命令频率统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个shell脚本的分析(1)


1 显示最常用的命令


1.1 原始脚本

$ history | \
> awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | \
> sort -rn | \ 
> head -n 10



从上面可以看出来,这个脚本分为五步,最核心的就是awk处理的那块。


首先,history命令列出存储在~/.bashhistory中存储的所有命令,其基本格式如下:


~$ history | head -n 1
   1  rm -r test/


接着,使用awk处理。我们仔细分析一下,在awk中,它首先将每个记录的第二个字段作为数组的下标,接着加1。每次遇到同样的字段,就自加1。这样a[]中存着每个命令的出现次数。当awk处理完毕所有记录后,进入END。END块打印数组和它的值,其格式如下:


~$ history | awk '{a[$2]++} END{for(i in a){print a[i] " " i}}' | head -n 3
2 ln
1 ./backup
1 grep


其中第一个字段表示该命令出现的次数。


当awk将所有的命令处理完毕之后,将其重定向到sort,由sort进行排序。sort -rn 意思就是以数字进行正向排序。


最后,由head命令输出前十个常用命令。


输出结果:


97 ls
78 history
71 cd
19 cat
18 echo
15 gcc
11 man
10 passwd
8 sed
6 ./guanji


1.2 改进后


$ history | \
> sed 's/\.\///' | \
> awk '{a[$2]++}END{for(i in a){print a[i] "\t" i "\t" a[i]/$HISTSIZE "%"}}' | \
> sort -rn | \ 
> head -n 10


其输出如下:


97      ls      0.235437%
76      history 0.184466%
71      cd      0.17233%
19      cat     0.0461165%
18      echo    0.0436893%
15      gcc     0.0364078%
11      man     0.026699%
10      passwd  0.0242718%
8       sed     0.0194175%
6       guanji  0.0145631%

1.2.1 改进项目

1.使用sed去掉./开头的命令

2.显示每个命令的使用频率

3.使用\t使输出更加美观




Date: 2012-09-18 二

Author: hic

Org version 7.9.1 with Emacs version 23

Validate XHTML 1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值