免费注册 查看新帖 |

Chinaunix

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

[文本处理] 想通过shell脚本,读取txt文件,插入到Oracle数据库中,求大神帮忙啊 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-22 10:24 |只看该作者 |倒序浏览
本帖最后由 邪气丨战魄 于 2014-07-22 12:34 编辑

想通过shell脚本,读取txt文件,文件中数据带有分隔符,分隔符将字段隔开,插入到Oracle数据库,分隔符是char(127)||char(94),txt数据格式如下:

15304^324234^74543184^2014
19051^545453^79247030^2014
18386^543454^16664083^2014


文本文件.zip (460 Bytes, 下载次数: 68)

求方法啊~~~

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2014-07-22 10:38 |只看该作者
请把你的文件压缩一下传上来看看

论坛徽章:
0
3 [报告]
发表于 2014-07-22 12:36 |只看该作者
文件已经上传了 回复 2# Shell_HAT
   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2014-07-22 14:31 |只看该作者
  1. filename="a.txt"
  2. dos2unix $filename
  3. sed 's/^/INSERT INTO table_name VALUES(/; s/\x7f./,/g; s/$/);/' $filename
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
5 [报告]
发表于 2014-07-22 14:42 |只看该作者
一个简单的awk就搞掂了,注意事项是你那个特殊字符


awk '{print xxx}' file|xargs 你的sql终端命令sqlplus。

论坛徽章:
7
亥猪
日期:2013-10-10 17:00:29辰龙
日期:2013-10-12 16:23:19卯兔
日期:2013-11-18 17:01:27金牛座
日期:2014-09-09 10:17:052015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之柏太阳神
日期:2015-09-25 13:56:42数据库技术版块每日发帖之星
日期:2016-08-06 06:20:00
6 [报告]
发表于 2014-07-22 15:59 |只看该作者
本帖最后由 li0924 于 2014-07-22 16:17 编辑

用oracle的sqlldr工具来导
  1. awk -F"^" -vOFS="," '{$1=$1}1' file > a.txt
  2. #生成控制文件;table_name col1 .. col4根据实际情况改
  3. $vi a.ctl
  4. LOAD DATA
  5. INFILE 'a.txt'
  6. INTO TABLE table_name
  7. APPEND
  8. FIELDS TERMINATED BY ','
  9. (col1,
  10. col2,
  11. col3,
  12. col4
  13. )
  14. #使用oracle用户登录;执行;username/passwd@sid根据实际情况改
  15. sqlldr username/passwd@sid control=a.ctl logfile=a.log
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-07-23 11:13 |只看该作者
回复 4# Shell_HAT 那个分隔符是两个组成的 一个是char(127)char(94)  不是只有一个的,还有就是这个是否是按顺序插入数据库表中的,比如说第一个数插入到数据库表第一个字段中,第二个数插入到第二个字段中,以此类推。。。


   

论坛徽章:
0
8 [报告]
发表于 2014-07-23 11:14 |只看该作者
回复 5# expert1   能写的详细一点嘛? 新手啊,真心不会啊~~


   

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
9 [报告]
发表于 2014-07-23 12:34 |只看该作者
回复 7# 邪气丨战魄


    你把4楼代码的执行结果发出来看看

论坛徽章:
0
10 [报告]
发表于 2014-07-23 14:22 |只看该作者
回复 9# Shell_HAT

能写的完整一点么? 只有tablename,不需要 数据库的帐号密码实例名?麻烦你了~~~


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP