定时分割文件脚本

一、序言

       这里有个任务,通过每天用户的登录日志文件,对固定信息进行切割,然后保存到新的文件,并上传到另外的服务器进行处理。

二、日志信息:

    当天的日志文件名: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

猜你喜欢

转载自greemranqq.iteye.com/blog/2189200