zoukankan      html  css  js  c++  java
  • 由浅入深shell脚本训练

    由浅入深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
  • 相关阅读:
    [操作系统]处理机调度的概念和层次
    [操作系统]线程的概念和多线程模型
    [操作系统]进程通信
    [操作系统]进程的控制
    [操作系统]进程的状态与转换
    [操作系统]进程的定义
    [操作系统]操作系统中断机制
    [操作系统]操作系统的运行机制和体系结构
    [操作系统] 操作系统的特征-并发性/共享性/虚拟性/异步性
    [PHP] PHP数组的哈希表实现
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3334744.html
Copyright © 2011-2022 走看看