好久没写博客了,今天上个自个儿的总结,主要是体现下awk读取外部shell变量问题,so easy。
代码如下:
1 #!/bin/sh 2 # auto create view for tables 3 # add by reasonpun@gmail.com
4 # @ 2010-12-16 10:30
5 # my data below:
6 #reasonpun@eds:~$ mysql -u root -p123456 -P6606 -h 192.168.1.207 -D ads -e "show tables";
7 #reasonpun@eds:~$ create ALGORITHM = MERGE view v_szj_ad_raw_log as select * from szj_ad_raw_log_2010_10 union all select * from szj_ad_raw_log_2010_11 union all select * from szj_ad_raw_log_2010_8 union all select * fro m szj_ad_raw_log_2010_9
8 #ads#v_szj_ad_raw_log#szj_ad_raw_log_2010_10#szj_ad_raw_log_2010_11#szj_ad_raw_log_2010_8#szj_ad_raw_log_2010_ 9 9 10 cmdMysql="mysql -u root -p123456 -h 192.168.1.207 -P"
11 for p in 6606 6608
12 do
13 cmdExe="$cmdMysql""$p"
# 外部变量引用需要双引号包括awk边界的单引号,从而可以完成shell变量的引用
14 cat ./mview.data |awk - F# 'BEGIN{mstr=""}{mstr = mstr"'"$cmdExe"'"" -D "$1" -e \"create ALGORITHM = MERGE view "$2" as select * from "$3"\"";for(i=4;i<=NF;i++){mstr = mstr" union all select * from "$i};print mstr }'
15 done
输入数据:./mview.data
ads#v_szj_ad_raw_log#szj_ad_raw_log_2010_10#szj_ad_raw_log_2010_11#szj_ad_raw_log_2010_8#szj_ad_raw_log_2010_9
输出结果:
mysql -u root -p123456 -h 192.168.1.207 -P6606 -D ads -e "create ALGORITHM = MERGE view v_szj_ad_raw_log as select * from szj_ad_raw_log_2010_10" union all select * from szj_ad_raw_log_2010_11 union all select * from szj_ad_raw_log_2010_8 union all select * from szj_ad_raw_log_2010_9 mysql -u root -p123456 -h 192.168.1.207 -P6608 -D ads -e "create ALGORITHM = MERGE view v_szj_ad_raw_log as select * from szj_ad_raw_log_2010_10" union all select * from szj_ad_raw_log_2010_11 union all select * from szj_ad_raw_log_2010_8 union all select * from szj_ad_raw_log_2010_9