免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1650 | 回复: 6
打印 上一主题 下一主题

[文本处理] 根据系统日期和运维人员信息文件对表字段进行更新 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-17 21:16 |只看该作者 |倒序浏览
本帖最后由 david0 于 2016-09-18 10:17 编辑

求助高手指点,下面的程序如何修改。
功能:在Oper_List.txt文件是运维人员每天的排班信息,要求通过定时脚本Oper_update.sh,根据Linux系统日期和Oper_List.txt中每天的排班信息,对数据库表的OperName和OperPhone字段进行定时更新(每天8:30执行定时任务)。

下面是运维人员的排班信息(用TAB隔开):
#more Oper_List.txt
北京分公司        张三        2016-09-15        8:30~8:29        18711111111        
北京分公司        李四        2016-09-16        8:30~8:29        18711111112        
北京分公司        王五        2016-09-17        8:30~8:29        18711111113        
北京分公司        赵六        2016-09-18        8:30~8:29        18711111114        
北京分公司        范三        2016-09-19        8:30~8:29        18711111115        
北京分公司        张四        2016-09-20        8:30~8:29        18711111116        

#more Oper_update.sh
#!/bin/sh
#########更新运维工程师信息########
source /home/operuser/.profile
tempdate=`date +%Y-%m-%d`
i=1
#定义每列的取值,分别对应机构名称,运维人员姓名,值班日期,值班时间,手机号
orgname=`awk '{if(NR=='"$i"') print $1}' /backup/shell/crontab/Oper_List.txt`
dutyname=`awk '{if(NR=='"$i"') print $2}' /backup/shell/crontab/Oper_List.txt`
dutydate=`awk '{if(NR=='"$i"') print $3}' /backup/shell/crontab/Oper_List.txt`
dutytime=`awk '{if(NR=='"$i"') print $4}' /backup/shell/crontab/Oper_List.txt`
mobile=`awk '{if(NR=='"$i"') print $5}' /backup/shell/crontab/Oper_List.txt`

#根据当天系统日期,对运维人员姓名OperName和手机号OperPhone进行更新
/opt/nmsoft/bin/nco_sql -server testdb -username operuser -password oper1234 <<EOF >/tmp/OperList.log
update Branch.Oper_tab set OperName='$dutyname', OperPhone='$mobile' where FirstOrgName like 'Beijing' and to_char(getdate,'yyyy-MM-dd') like '$tempdate' and OperName not like '$dutyname';
go
quit
EOF


举例:
定时任务每天8:30执行Oper_update.sh脚本,根据当前系统日期,然后从Oper_List.txt文件中找到日期为2016-09-16这一行,抽取相应的列信息,第2列、第5列
北京分公司        李四        2016-09-16        8:30~8:29        18711111112
再执行nco_sql命令进行表字段更新的操作:
update Branch.Oper_tab set OperName='李四', OperPhone='$18711111112' where FirstOrgName like 'Beijing' and to_char(getdate,'yyyy-MM-dd') like '2016-09-16';


论坛徽章:
2
luobin
日期:2016-06-17 17:46:36lufei
日期:2016-06-17 17:49:16
2 [报告]
发表于 2016-09-17 21:49 |只看该作者
  1. [root@ethan ~]# echo $nowdate
  2. 2016-09-16
  3. [root@ethan ~]# awk -vvar=$nowdate '$3==var{print $0}' file
  4. 北京分公司        李四        2016-09-16        8:30~8:29        18711111112       
复制代码


你的awk用的我都看不懂了。。 你现在有什么问题呢?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2016-09-17 23:33 |只看该作者
本帖最后由 jason680 于 2016-09-17 23:42 编辑

回复 1# david0

$ tempdate=`date +%Y-%m-%d`

$  echo "$tempdate"
2016-09-17

$ awk -vd="$tempdate" -vq="'" 'function qs(s){return(q s q)}$3==d{printf("update Branch.Oper_tab set OperName=%s, OperPhone=%s where FirstOrgName like %s and to_char(getdate,%s) like %s;\n",qs($2),qs("$"$5),qs("beijing"),qs("yyyy-MM-dd"), qs(d))}' Oper_List.txt
update Branch.Oper_tab set OperName='王五', OperPhone='$18711111113' where FirstOrgName like 'beijing' and to_char(getdate,'yyyy-MM-dd') like '2016-09-17';



论坛徽章:
0
4 [报告]
发表于 2016-09-18 11:10 |只看该作者
回复 3# jason680

你写的程序不是太理解,在nco_sql执行的SQL语句中改成这样测试是报错的,应该用不同的变量区分才对啊。update Branch.Oper_tab set OperName=%s, OperPhone=%s where FirstOrgName like %s and to_char(getdate,%s) like %s
求指点!






论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2016-09-18 12:29 |只看该作者
回复 4# david0

这应不用我来说....

1. 转向到文档
  awk ... >/tmp/OperList_sql_cmd
注: go, exit  自行检查与加入

2. SQL CMD
  /opt/nmsoft/bin/nco_sql ...  </tmp/OperList_sql_cmd >/tmp/OperList.log

可以检查(OperList_sql_cmd)有无错误,也可手动自行验证...

论坛徽章:
0
6 [报告]
发表于 2016-09-18 13:32 |只看该作者
回复 2# hz_oracle

我加的awk那几行是用于输出Oper_List.txt的几列,但并没有实现根据$tempdate当前系统日期输出Oper_List.txt文件对应的几列的功能。在nco_sql语句中
update Branch.Oper_tab set OperName='$dutyname', OperPhone='$mobile' where FirstOrgName like 'Beijing' and to_char(getdate,'yyyy-MM-dd') like '$tempdate'
就是想把符合当前日期的列内容(第2列和第5列)更新到对应的表字段上。


论坛徽章:
0
7 [报告]
发表于 2016-09-18 20:28 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP