Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2538721
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: LINUX

2014-06-25 11:31:54

   局方分配了一个任务,需要对30多万的数据,核查失败原因。而局方提供的号码是一个文本文件。用过Oracle数据库的人,都知道,使用PL/SQL Developer开发工具,打开一个SQL Windows ,写个带rowid的查询 语句如:select a.*,rowid from cxp_xuanling_error a;然后点开小锁按钮,将数据复制,粘贴到里面。当然了,如果数据量小,没啥问题。可当数据量多的时候,这样做会非常慢。
    我首先想到的,就是先把文件进行切割,因为数据量大,不好加载。上网搜索,解决办法还真不少。文件切割的文章有很多,终于发现比较适合我的,我采用了,采用SHELL程序,进行对文件的切割。比如每5万行,进行文件切割, SHELL代码如下:

点击(此处)折叠或打开

  1. #!/bin/sh

  2. name=$1
  3. lines=`wc -l $name|awk '{print $1}'`
  4. filename="_disk"
  5. index=0
  6. count=1
  7. app=50000
  8. while [ $count -lt $lines ]
  9. do
  10. end=`expr $count - 1 + $app`
  11. sed -n "$count,${end}p" $name > $name${filename}${index}
  12. count=`expr $count + $app`
  13. index=`expr $index + 1`
  14. done
执行这个Shell脚本,后面添加一个文件名即可。
把文件切割为小文件后,接下来的一部就是,将提供的数据,变成一个添加的sql语句。这一步可以使用工具,不过自己比较钟爱使用awk。
比如说,我想在每5000行处sql语句追加commit;进行数据的提交。那么用awk,将简单方便,使用如下awk语句:
awk -F " " '{if(NR%5000==0){print "insert into cxp_xuanling_error_base(serial_number) values('\''"$1"'\''); \r\ncommit;"} else{print "insert into cxp_xuanling_error_base(serial_number) values('\''"$1"'\'');"}}' xuanling_error_all.txt_disk0 > xuanling_error_all.txt_disk0.sql
将生成的文件,重新写入到xuanling_error_all.txt_disk0.sql文件中。
生成了SQL语句,下面就好操作了,登陆sqlplus,执行这个语句即可。

SplitFile.rar



阅读(3286) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~