实例1:

1、对Apache日志,编写对应的处理脚本
输入:
Apache
2020-02-03 11:03:23 WARN My warning message repeated 3 times
2020-02-03 11:03:23 ERR oops, error message repeated 8 times
2020-02-03 11:03:26 ERR this is my error message repeated 1 times
2020-02-03 11:03:26 WARN MY warning , so scary, repeated 1 times
2020-02-03 11:03:26 WARN cpu utilization high, repeated 1 times
2020-02-03 11:03:29 INFO this is for test repeated 2 times

1.1统计不同级别日志的行数
输出:
Apache
WARN: 3
ERR: 2
INFO: 1
思路:
1)声明使用的shell
2)定义变量
3)对内容过滤将结果,输出
4)为了方便部门其他人使用,我们会在第二行写注释,此脚本用途

常用选项说明:

– c 显示输出中,在每行行首加上本行在文件中出现的次数。

– d 只显示重复行。

– u 只显示文件中不重复的各行。

A、过滤出所需内容,及重复次数

shell-信息截取妙用_apache


B、最终脚本

vim   uniq.sh 
#!/bin/bash
W=`grep "WARN" uniq.log | cut -d ' ' -f 3 | uniq -c | awk '{print $1}'`
E=`grep "ERR" uniq.log | cut -d ' ' -f 3 | uniq -c | awk '{print $1}'`
I=`grep "INFO" uniq.log | cut -d ' ' -f 3 | uniq -c | awk '{print $1}'`

echo "WARN:$W"
echo "ERR:$E"
echo "INFO:$I"

1.2 统计Error/WARN发生的总次数
输出:
Apache
ERR: 9
WARN: 5


实例2

1、对指定字段求和

vim 1.sh

1 aaa 123.52

2 bbb 125.54

3 aaa 123.52

4 aaa 123.52

5 ccc 126.36

shell-信息截取妙用_shell_02


2、分组求和,排序

shell-信息截取妙用_运维_03


awk ‘{count[$2] += $3} END {for(i in count ) print i, count[i]}’ sum.log | sort -nrk 2

shell-信息截取妙用_运维_04


3、仅从日志过滤出ip输出屏幕

awk ‘{print $1}’ access.log |sort | uniq -c | sort -n -r

4、shell 对数据备份

#!/bin/bash
if [ -d /log/bak/ ] || mkdir -p /log/bak/
then
tar Pcf /log/bak/log_$(date +%Y%m%d)''$(date +%H%M%S).tar.gz /var/log/*.log
echo "干完!可以约会啦"
fi

5、

#!/bin/bash

USER=root
#密码
PASSWORD=5EYS40T04BMF
#下载文件目录
SRCDIR=/u02/dab
#FTP目录(待下载文件目录)
DESDIR=/u01/sftpFiles
#银联IP
IP=192.168.1.10
#端口
PORT=22022

lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT}<<EOF
cd ${DESDIR}
lcd ${SRCDIR}
#需要下载的文件为text.xml
get text.xml
by
EOF