您的位置:首页 > 运维架构 > Linux

在linux下用awk分析日志文件

2014-08-26 11:53 369 查看
今儿刚坐下不久,领导就发话了,在这么个文件中找到开头为To: =?,包在尖括号中的数据存到数据库中。

文件如下:
<invitation-noreply@mail.com>
To: =?UTF-8?B?5p2O5LqR5biG?= <wxg2xj@126.com>
Message-ID: <852638217.283379.1382198734518.JavaMail.root@SJSWT46-220.opi.com>
Subject: =?UTF-8?B?5p2O5LqR5biG77yM5oub5ZWG6K+B5Yi4IOmCgOivt+S9oA==?=
=?UTF-8?B?5oqV6YCSMjAxNOagoeWbreaLm+iBmOiBjOS9jQ==?=

首先要想办法提取出数据到文件,然后循环读每一行,并插入到数据库。

本人没什么好办法,只好采用awk硬撸…

awk '/To: =\?/' filename | awk -F '<' '{print $2}' |awk -F '>' '{print $1}' >> lzq.result

方法虽笨,但也取着了……

循环读文件每一行有三种方法:本人采用的就是第二种

1) while read line

do
... $line
done > filename(要循环的文件名)

2) cat filename |while read line
do
...$line
done

3) for line in 'cat filename'
do
...$line
done
总感觉这个$line很Nb……

接下来就要存进数据库了,采用如下命令:

mysql -u用户名 -p密码 -h主机名 -e 数据库语句

一定要注意单双引号……

最终脚本如下。

#!/bin/bash
awk '/To: =\?/' filename | awk -F '<' '{print $2}' |awk -F '>' '{print $1}' | while read line
do
mysql -uroot -proot -h 127.0.0.1 -e "insert into test.deny_mail(email) values('$line'); "
done

成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: