最近,经常要稽核一下数据,当然了,可以手动的去执行。可是比较的繁琐。自己在想,如果能让这些数据自动的执行,获取结果,那该多好。当然了,我们肯定要做一些前期准备工作。
1.第一步,在数据库(oracle)上创建一个表。
2.使用java,将表中的数据下载下来。写成文件。我这里记录与记录之间的间隔符为回车换行(\r\n)。
3.将这些数据拼凑成SQL语句,其实主要点是这个。
大家知道,我们使用java程序,将数据库表中的数据做成记录,一行一行的排列,而SQL字符串,一般都是一行。因此我们需要做的就是,将这些多行的数据,变成一行。
我想到了awk,因为awk处理数据,确实很厉害。经常查找资料,和自己多次的实验。终于完成了。
比如我这里的测试文件在 tmp/base.data,文件内容如下:
$ cat base.data
15617831910
15617831790
13043795558
13137180868
13203732017
13203731261
13203731057
13203735739
13203731607
13203732336
13203733887
13140590497
13233844955
15517338450
15565227246
15517336724
13140598206
15516456326
15560158504
15560158934
15565822773
15639353973
15639365813
15639373893
15516297836
15565828575
15670108017
15637342161
15670158810
15517335724
13253044488
15565826861
15639373103
15516433752
15516614779
15670403572
15670457004
15617141561
15565227457
13243495978
15517374682
15617142290
13072695246
15670411351
15603824810
15565794134
15670410608
15603824312
15670410648
15603824138
15670411710
15517372401
15517372442
15517361495
13017546044
15515956059
15639162194
数据只有一列,记录之间的分隔符,上面说过了,就是回车换行符。
本人对AIX环境下的AWK,用的不多,使用ORS都用不了,经过自己的摸索,终于弄好了。
使用下面的awk代码,即可完成如下的变换。
$ awk 'BEGIN{RS="\r\n"; ORS=", "}{if(length($1) > 0){print "'\''"$1"'\''"}}' tmp/base.data | awk '{print substr($0,1, length($0)-2)}'
'15617831910', '15617831790', '13043795558', '13137180868', '13203732017', '13203731261', '13203731057', '13203735739', '13203731607', '13203732336', '13203733887', '13140590497', '13233844955', '15517338450', '15565227246', '15517336724', '13140598206', '15516456326', '15560158504', '15560158934', '15565822773', '15639353973', '15639365813', '15639373893', '15516297836', '15565828575', '15670108017', '15637342161', '15670158810', '15517335724', '13253044488', '15565826861', '15639373103', '15516433752', '15516614779', '15670403572', '15670457004', '15617141561', '15565227457', '13243495978', '15517374682', '15617142290', '13072695246', '15670411351', '15603824810', '15565794134', '15670410608', '15603824312', '15670410648', '15603824138', '15670411710', '15517372401', '15517372442', '15517361495', '13017546044', '15515956059', '15639162194'
可以看到,我们就把竖列排放的数据,变成横行排列起来。
这样一来,我们拼接SQL字符串select ## from ## where column in (****)就容易多了。
其中的****,通过我给出的awk,就可以完成了。
其中,在最后用到了一个管道操作,原因是,因为我每一行都有回车换行符。在进行纵转向横时,就多出来一个ORS,因此使用awk自带的substr函数,将最后的两个字符去掉即可(注:我的分隔符采用的是逗号和一个空格,因此自然要减去2,其他类推)。
阅读(3230) | 评论(0) | 转发(0) |