由浅入深shell脚本训练

最近一直在学习Shell,以前一直觉得Shell语法很难,不好学,现在总算有一些收获了。其实Shell脚本就是一堆linux命令的集合,把脚本里每一步的命令搞懂是什么意思,然后整个脚本的意思就搞出来了;同样要通过脚本完成一项工作,就把这项工作分解成若干的小命令,然后把小命令集合起来就可以了。至于什么awk、sed、正则,都要靠自己平常的积累。

①查询一个服务某天的请求次数:

1
2
cat renren-1.log|grep "MSG without parse">temp
awk '{a[$1]++}END{for(i in a)print i,a[i]}' temp

②第一列相同,第二列相加:

1
awk '{a[$1]+=$2}END{for(m in a)print m,a[m]}'

③查询包含log字符的文件名称:

1
find . -name "*.log*" -type f | xargs ls -l

④查询批量服务某一天请求次数:

1
2
3
4
5
6
7
8
#!/bin/bash
#查询批量服务某一天请求次数
find . -name "*log*" -type f | xargs ls -l > logs_ll
awk '{print $8}' logs_ll > logs
cat logs | while read line
do
    echo $line echo 2013-08-01 cat $line | egrep ">>>|MSG without parse" grep "2013-08-01" |wc -l
done

⑤查询批量服务某一天请求次数,过滤掉请求次数为0的请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash
#查询批量服务某一天请求次数,过滤掉请求次数为0的请求
find . -name "*log*" -type f | xargs ls -l > logs_ll
awk '{print $8}' logs_ll > logs
cat logs | while read line
COUNT=`cat $line | egrep ">>> |MSG without parse" grep "2013-07-02" wc -l`
do
    if [ $COUNT -ne 0 ]; then
    echo $line 2013-07-02
        echo $COUNT
    else
    echo $line >/dev/null
    fi
done

⑥查询批量服务某个月请求次数,过滤掉请求次数为0的请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
#查询批量服务某个月请求次数,过滤掉请求次数为0的请求
find . -name "*log*" -type f | xargs ls -l > logs_ll
awk '{print $8}' logs_ll > logs
for day in `seq 30`
do
    cat logs | while read line
    COUNT=`cat $line | egrep ">>> |MSG without parse" grep "2013-08-$day" wc -l`
    do
        if [ $COUNT -ne 0 ]; then
        echo $line 2013-08-$day
            echo $COUNT
        else
        echo $line >/dev/null
        fi
    done
done

⑦统计输出一个服务在某段时间的请求次数和对应的日期:

1
2
cat $line | egrep ">>> |MSG without parse" |awk '{print $1}' >>log.tmp
cat log.tmp |sort |uniq -c

⑧查询批量服务在所有日期的请求次数,并过滤掉请求次数为0的请求,输出服务名、日期和对应的请求次数:

1
2
3
4
5
6
7
8
9
10
11
#!/bin/bash
#查询批量服务在所有日期的请求次数,并过滤掉请求次数为0的请求,输出服务名、日期和对应的请求次数
find . -name "*log*" -type f | xargs ls -l > logs_ll
awk '{print $6,$8}' logs_ll > logs
awk '{print $2}' logs>log
cat log | while read line
do
    cat $line | egrep ">>> |MSG without parse" awk '{print $1}' > $line.tmp
    echo $line
    cat $line.tmp |sort uniq -c
done
 
 
 
标签: Shell、linux

由浅入深shell脚本训练的更多相关文章

  1. shell脚本训练

    *注:shell中的/data目录为自创练习目录 1,编写脚本systeminfo.sh,显示当前主机系统信息.包括主机名,IPV4地址,操作系统版本,内核版本,cpu型号,内存大小,硬盘大小 结果: ...

  2. shell脚本的基本结构以及如何执行

    1.shell脚本通常以.sh为后缀,不是说不带这个.sh脚本就不会执行,而是大家一种通用的命名规范而已 2.shell脚本中的第一行一定是:#! /bin/bash.该命令说明,该文件使用的是bas ...

  3. linux shell习题训练

    shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2 ...

  4. Shell脚本学习指南 [ 第一、二章 ] 背景知识、入门

    摘要:第一章介绍unix系统的发展史及软件工具的设计原则.第二章介绍编译语言与脚本语言的区别以及两个相当简单但很实用的Shell脚本程序,涵盖范围包括了命令.选项.参数.Shell变量.echo与pr ...

  5. shell习题训练

    shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2 ...

  6. 用 shell 脚本做自动化测试

    前言 项目中有一个功能,需要监控本地文件系统的变更,例如文件的增.删.改名.文件数据变动等等.之前只在 windows 上有实现,采用的是 iocp + ReadDirectoryChanges 方案 ...

  7. 第一个shell脚本

    打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好. #!/bin/bash echo "Hello World !" &quo ...

  8. 使用C#给Linux写Shell脚本

    在这个逼格决定人格,鄙视链盛行的年头,尤其是咱们IT界,请问您今天鄙视与被鄙视的次数分别是多少?如果手中没有一点压箱的本事,那就只有看的份了.今天我们也要提升下自己的格调,学习些脑洞大开的东西,学完之 ...

  9. shell脚本规划化模板

    shell脚本规划化模板 Linux运维过程中,shell脚本是不可缺少的工具,但是每个运维人员编程的习惯都不一样,很多时候就是实现某个功能,写出来的脚本都是烂七八糟的.脚本必须规范化,应该从以后几个 ...

随机推荐

  1. sql server 更新表,每天的数据分固定批次设置批次号sql

    按表中的字段 UpdateTime 按每天进行编号,每天的编号都从1开始编号,并附带表的主键 cid,把数据存入临时表中 WITH temp AS (SELECT cid,updatetime, RO ...

  2. 深入浅出MS06-040

    入浅出MS06-040 时至今日,网上已有颇多MS06-040的文章,当中不乏精辟之作.与其相比,本文突显业余,技术上无法超越,徒逞口舌之快.本文适合有一定计算机基础,初步了解溢出攻击原理,略微了解逆 ...

  3. IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)

    原版的blog,转载请注明出处 blog.csdn.net/hello_hwc 前言: 新NSURLSession的UploadTask的,结果写那个Demo的时候想要写成拍照上传.然后就想到先写一个 ...

  4. 【百度地图API】如何利用自己的数据制作社交地图?只显示可视区域内的标注

    原文:[百度地图API]如何利用自己的数据制作社交地图?只显示可视区域内的标注 摘要:如果你自己的数据已经超过1万个,如何进行合理的显示?除了聚合marker外,还有一个办法.那就是,只显示可视区域内 ...

  5. Swift语言指南(四)--类型安全和类型推断

    原文:Swift语言指南(四)--类型安全和类型推断 Swift是一门类型安全语言,类型安全语言需要代码里值的类型非常明确.如果你的代码中有部分值需要String类型,你就不能错误地传递Int. 鉴于 ...

  6. Java设计模式(八)观察者模式 迭代器模式

    (十五)观察者模式 观察者模式,定义对象间一对多关系,一个对象状态发生改变,全部依赖于它的对象都收到通知而且自己主动更新,观察者与被观察者分开.比如邮件订阅.RSS订阅,假设有更新就会邮件通知你. i ...

  7. HDU 1501 Zipper(DP,DFS)

    意甲冠军  是否可以由串来推断a,b字符不改变其相对为了获取字符串的组合c 本题有两种解法  DP或者DFS 考虑DP  令d[i][j]表示是否能有a的前i个字符和b的前j个字符组合得到c的前i+j ...

  8. 健身小管家--android app源码

    把做了近一个月的android程序源码放出来,里面包括但不限于如下内容: 1. 简单的android项目结构 2. 通用的adapter,不再为每一个ListView都写一个adapter,只要用此一 ...

  9. 项目管理实践 -- 健身小管家(Fitness housekeeper)的管理

      最近在网上看到一篇文章<王石:我每天都强迫自己做的一件事>,[http://blog.sina.com.cn/s/blog_4dfc1c330102v0d0.html] 原始链接不详. ...

  10. linux 安装httpd(验证通过)

    一.安装apache(http服务) 1. 从apache.org下载源码安装包 2. 解压缩 # tar zxf httpd-2.2.4.tar.gz # cd httpd-2.2.4 3. 安装a ...