Linux 下使用awk处理数据并写入数据库

来源:互联网 发布:ubuntu rm删除多个文件 编辑:程序博客网 时间:2024/06/04 23:37

Linux 下使用awk处理数据并写入数据库

一、awk功能使用

awk -F '|' '{print $1}‘

使用-F选项指定分割符,打印‘’第几个字段‘’

二、连接数据库并执行插入操作

mysql -h 10.18.20.10 -uuser -ppassword fxs -N

三、使用awk计算得到每个字段的值

由于第一条记录是字段名称,所以从后去最后一条,使用awk去处固定的字段。在shell中两个反单引号标识执行shell命令行,详单与$(shell命令)的功能。如下:

`(tail -n 1 $i | awk -F '|' '{print $8}')`

表示提取$i文件最后1行,以竖线“|”为分隔符的第8个字段

四、示例代码:

#!/bin/sh

#获取昨天的日期
T=`date -d yesterday +%Y%m%d`
#echo "$T"
#将文件移动到指定目录
mv ~/DM_$T* /home/Comparison/XN_data/hour
#列出文件列表写入日志
FILE_LI=`find ./hour  -name "DM*"
echo `date`  >>/home/Comparison/XN_data/loader_data.log
echo "$FILE_LI" >>/home/Comparison/XN_data/loader_data.log

if [ "$FILE_LI"  ];then
        for i in $(ls $FILE_LI)
        do
           #计算数据时间
           datatime=$(echo "${i:25:10}")
           
           TIME_ID=`(tail -n 1 $i | awk -F '|' '{print $1}')`

           AREA_NAME=`(tail -n 1 $i | awk -F '|' '{print $2}')`

           ATTACH_REQ_CNT=`(tail -n 1 $i | awk -F '|' '{print $3}')`
       
           ATTACH_SUCC_CNT=`(tail -n 1 $i | awk -F '|' '{print $4}')`
           
           ATTACHSUCCRATE=`(tail -n 1 $i | awk -F '|' '{print $5}')`
           
           ATTACH_REQ_CNT_USR=`(tail -n 1 $i | awk -F '|' '{print $6}')`
          
           ATTACH_SUCC_CNT_USR=`(tail -n 1 $i | awk -F '|' '{print $7}')`
           
           OUTUSERATTACHSUCCRATE=`(tail -n 1 $i | awk -F '|' '{print $8}')`
        
           ATTACHREQDELAY=`(tail -n 1 $i | awk -F '|' '{print $9}')`
          
           PDP_REQ_CNT=`(tail -n 1 $i | awk -F '|' '{print 10}')`
        
           PDP_SUCC_CNT=`(tail -n 1 $i | awk -F '|' '{print $11}')`
       
           PDPSUCCRATE=`(tail -n 1 $i | awk -F '|' '{print $12}')`
          
           PDPREQDELAY=`(tail -n 1 $i | awk -F '|' '{print $13}')`
         
           TAU_REQ_CNT=`(tail -n 1 $i | awk -F '|' '{print $14}')`
          
           TAU_SUCC_CNT=`(tail -n 1 $i | awk -F '|' '{print $15}')`
          
           TAUSUCCRATE=`(tail -n 1 $i | awk -F '|' '{print $16}')`
          
           TAU_REQ_CNT_USR=`(tail -n 1 $i | awk -F '|' '{print $17}')`
        
           TAU_SUCC_CNT_USR=`(tail -n 1 $i | awk -F '|' '{print $18}')`
          
           OUTUSERTAUSUCCRATE=`(tail -n 1 $i | awk -F '|' '{print $19}')`
         
           TAUREQDELAY=`(tail -n 1 $i | awk -F '|' '{print $20}')`
           
           USER_COUNT=`(tail -n 1 $i | awk -F '|' '{print $21}')`
          
           FLOW=`(tail -n 1 $i | awk -F '|' '{print $22}')`
           
           year=${datatime:0:4}
           month=${datatime:4:2}
           day=${datatime:6:2}
           datahour=${datatime:8:2}
           
           datatime=$year"-"$month"-"$day" "$datahour":00:00"

           #连接数据库
           mysql -h 10.18.20.10 -uuser -ppassword fxs -N <<EOF
         
         #插入数据到表dx_attach_hour
         insert into dx_attach_hour(CITY,YEAR,MONTH,dataday,datahour,request,success,delay,attach_rate,CREATE_TIME,MODIFY_TIME,datatime) values('$AREA_NAME','$year','$month','$day','$datahour','$ATTACH_REQ_CNT','$ATTACH_SUCC_CNT','$ATTACHREQDELAY','$ATTACHSUCCRATE','$datatime','$datatime','$datatime');

         #插入数据到表dx_bear_hour
         insert into dx_bear_hour(CITY,YEAR,MONTH,DAY,HOUR,request,success,delay,bear_rate,CREATE_TIME,MODIFY_TIME,datatime) values('$AREA_NAME','$year','$month','$day','$datahour','$PDP_REQ_CNT','$PDP_SUCC_CNT','$PDPREQDELAY','$PDPSUCCRATE','$datatime','$datatime','$datatime');
         #插入数据到表dx_tau_hour
        insert into dx_tau_hour(CITY,YEAR,MONTH,DAY,HOUR,request,success,delay,tau_rate,CREATE_TIME,MODIFY_TIME,datatime) values('$AREA_NAME','$year','$month','$day','$datahour','$TAU_REQ_CNT','$TAU_SUCC_CNT','$TAUREQDELAY','$TAUSUCCRATE','$datatime','$datatime','$datatime');

        #插入数据到表dx_flow_hour
        insert into dx_flow_hour(CITY,YEAR,MONTH,DAY,HOUR,VALUE,CREATE_TIME,MODIFY_TIME,datatime) values('$AREA_NAME','$year','$month','$day','$datahour','$FLOW','$datatime','$datatime','$datatime');

        #插入数据到表dx_users_hour
        insert into dx_users_hour(CITY,YEAR,MONTH,DAY,HOUR,total_users,CREATE_TIME,MODIFY_TIME,datatime) values('$AREA_NAME','$year','$month','$day','$datahour','$USER_COUNT','$datatime','$datatime','$datatime');

EOF
done

fi


0 0
原创粉丝点击