麻烦前辈帮写个shell,功能是读取linux下某个目录下的某个特定文件,将某些字符串load到mysql的指定表中

指定的字符串是图片中红线框起来的部分需要用正则表达式,因为需要每隔一个小时执行一次shell,所以每次执行完shell后的还需要将txt的日志文件先MV到一个备份目录下,... 指定的字符串是图片中红线框起来的部分需要用正则表达式,因为需要每隔一个小时执行一次shell,所以每次执行完shell后的还需要将txt的日志文件先MV到一个备份目录下,防止下次执行的时候又全量读一次。
指定目录暂时用/root/,备份目录暂时用:/root/ng_log_bak,文件名暂时用:access.log,mysql的用户名暂时用user,密码暂时用passwd(如果需要地址就写127.0.0.1,端口8080),mysql表名暂时用table_name ,
展开
 我来答
沐枫溪林
2014-03-12 · 超过15用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:34.2万
展开全部
#!/bin/sh -e
LOGFILE=/root/access.log
BAKDIR=/root/ng_log_bak
TMPSQL=/tmp/altmp.sql

if [ -f ${LOGFILE} ]; then
   cat ${LOGFILE} | gawk -F' ' '{ print "insert into table_name(col1,col2) values(`"substr($4,2)"`,`"gensub(".*?act=","","g",$13)"`);"; }' > ${TMPSQL}
   mysql --user=user --password=passwd db_name < ${TMPSQL}
   rm ${TMPSQL}
   mv ${LOGFILE} ${BAKDIR}/access.log.$(date +%Y%m%d%H%m)
fi
追问
非常感谢,根据您的提示跑出来
06 Mar 2014 22:30:19|label
06 Mar 2014 22:30:19|label
06 Mar 2014 22:30:19|label
06 Mar 2014 22:30:19|label
这样格式的文件,还想问您一下怎么才能把06 Mar 2014 22:30:19|label的格式变成2014-03-06 22:30:19|label呢?
爱I薇薇
2014-03-12 · TA获得超过281个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:144万
展开全部
#!/bin/sh
dir='/root'
dirbak='/root/ng_log_bak'
cd $dir
paraone=`cat $dir/access.log|awk -F'[' '{printf $2}'|awk '{printf $1 "\n"}'`
paratwo=`cat $dir/access.log|awk -F'=' '{printf $2}'|awk '{printf $1 "\n"}'`
sqlplus -s user/passwd@SID << EOF > insertoracle.log
insert into table_name(dateone,labelone) values('$paraone','$paratwo');
EOF
mv $dir/access.log $dirbak
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式