由浅入深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. jquery.validate1.13

    jquery.validate新的写法(jquery.validate1.13.js) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  2. HDU 4303 Hourai Jeweled 树dp 所有权利和航点 dfs2次要

    意甲冠军: long long ans = 0; for(int i = 1; i <= n; i++) for(int j = i+1; j <= n; j++) ans += F(i, ...

  3. maven+hudson构建集成测试平台

     1.下载hudson.war.2.命令行运行:java -jar hudson.war --httpPort=8070 -Dorg.eclipse.jetty.util.URI.charset=GB ...

  4. 手工制作的年份Java老A发售量

    Java老A这本书是写了很长的时间,昨天终于开始china-pub.京东.活动当天发售的猫,现在,简称买卖,他当然还没有到. 有兴趣的人能够去看看哈(兴许其它站点地址也会在这里公开): china-p ...

  5. oracle处理节点之间的父子关系

    通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的.而当我们使用Oracle当数据库,我们可以有一个简 ...

  6. tcp接收队列

    对于接收数据包,内核维护如下几个队列:1>全局 backlog 队列,驱动程序调用 netif_rx 将接收到的数据包缓存于该队列中.2>sock 结构中 back_log 队列,网络层在 ...

  7. mysqldump报错

    在使用mysqldump命令备份整个数据库的时候,报错例如以下: mysqldump: Couldn't execute 'SHOW TRIGGERS LIKE 'userlog'': Got err ...

  8. a链接bug

    <a href=”javascript:void(0);” class="btn" id="btn"></a> 在ios系统中(andr ...

  9. Javascript实战开发:教你使用raphael.js绘制中国地图

    最近的数据统计项目中要用到中国地图,也就是在地图上动态的显示某个时间段某个省份地区的统计数据,我们不需要flash,仅仅依靠raphael.js以及SVG图像就可以完成地图的交互操作.在本文中,我给大 ...

  10. WEB开发中常用的正则表达式集合

    在计算机科学中,正则表达式用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.在WEB开发中,正则表达式通常用来检测.查找替换某些符合规则的字符串,如检测用户输入E-mai格式是否正确,采集符 ...