一、序言
这里有个任务,通过每天用户的登录日志文件,对固定信息进行切割,然后保存到新的文件,并上传到另外的服务器进行处理。
二、日志信息:
当天的日志文件名:webapp-login.log
日志主要内容:
[INFO ] [16:09:31] LOGIN - 张三(803521136) - pramms_xxxxxxxxx [INFO ] [16:09:35] LOGIN - 李四(803521136) - pramms_xxxxxxxxx [INFO ] [16:09:35] LOGIN - ERROR - 王五(803521136) - pramms_xxxxxxxxx [INFO ] [17:09:31] LOGIN - 张三(803521136) - pramms_xxxxxxxxx
三、命令执行过程如下:
1.找到当天文件 :
cat /log/webapp-login.log
2.找到含有 LOGIN 并不含有 ERROR 的信息
grep "LOGIN" | grep -v "ERROR"
3.按“ - ” 进行分割,找到获取第二组文字信息,注意加空格
awk -F ' - ' '{print $2}'
会得到这样的我字符串:张三(803521136)
4.同理按"(" 分割,获取第一组 字符串
awk -F '(' '{print $2}'
得到:张三
5.默认排序
sort
6.同行统计:排序后,可以连续出现过几次,表示一天登录过几次
uniq -c
得到:2 张三
7. 按出现次数 大 到小 排除,并输出到当前loginInfo 目录文件
sort -nr >> ./loginInfo/loginfo.info
该命令完整如下:
cat /log/webapp-login.log | grep "LOGIN" | grep -v "ERROR" | awk -F ' - ' '{print $2}' | awk -F '(' '{print $1}' | sort | uniq -c|sort -nr >> login.info
文件结果如下:
2 张三 1 李四
四、我们要定时执行这个脚本,脚本命名为 :createLoginInfo.sh
1进入文件目录,遍历该文件
#!/bin/bash # 描述: 统计用户登录信息 # 作者:xxx # 时间:2015-03-05 # 创建个函数 function uplodaLoginInfo(){ # 进入文件目录 cd /log #遍历文件,这里用ls 可以遍历N个文件,例子只有一个 for file in 'ls weapp-login.log ' # 执行 do # 输出文件变量名 echo $file date=`date '+%Y-%m-%d'` # 文件拆分 cat /log/webapp-login.log | grep "LOGIN" | grep -v "ERROR" | awk -F ' - ' '{print $2}' | awk -F '(' '{print $1}' | sort | uniq -c|sort -nr >> ./loginInfo/login.info # 上传到某个域名下的服务器 # curl 下面单独写,不需要可以不用 done echo "uploadWeb4Log done"; } # 建一个目录 mkdir -p loginInfo
五、 shell 模拟表单提交
#命令: curl # 参数文件路径 $file 是上面你的文件变量名 -F "file=@loginInfo/"$file".info" # 参数日期 -F "date="$date # 参数密码 -F "password=web4" # 参数名字 -F "name=admin" # 参数文件名 -F "filename="$file".info" # 请求的地址 http://www.xxxx.xxx.getFile
六、定时任务
用的基本的crontab -e 打开,基本的cron 表达式的
假设每分钟执行一次命令:
* * * * * createLoginInfo.sh
小结:
1.linux 命令不熟悉,如有错误请指出,这里仅仅记录下 基本的
2.关于文件分割 以及 curl 的强大命令,比较多,下面贴一些我参考的东西
-- awk 命令
http://blog.chinaunix.net/uid-23302288-id-3785105.html
-- sort 命令
http://www.2cto.com/os/201304/203309.html
-- curl 命令
http://www.aiezu.com/system/linux/linux_curl_syntax.html
-- crontab
http://www.jb51.net/LINUXjishu/19905.html