linux使用awk写监控进程,Linux 下使用awk处理数据并写入数据库

本文介绍如何在Linux环境下使用awk工具处理文件数据,并通过Shell脚本将处理后的数据批量插入到MySQL数据库中。具体步骤包括设置日期变量、移动文件、提取文件列表、解析文件内容以及执行数据库插入操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 <

#插入数据到表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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值