Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle

Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle

编写控制文件ctl,部分内容(截取了部分字段)如下图:
Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle
查看文件编码为utf-8,现将文件编码转为gbk,如下图:
Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle
替换文件分隔符,使用以下命令:
sed -i “s/$/^M/g” cnca.bin
查看文件前几条记录:cat -A cnca.bin | head -n 2,
发现记录分隔符为^M$(Linux中代表回车换行符),如下图所示:

Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle

利用Oracle的导入工具sqlldr,导入数据出现如下错误:
Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle
错误提示,超过读取缓冲区,将readsize设置最大之后,还是依然报这个错误,然后查看文件分隔符依然只是\n,前面以为文件替换M$之后记录分隔符已经变成\r\n,其实只是在文件末尾增加了一个回车符M。经过几番测试之后,终于找到了替换方法,使用如下命令,可以正常替换记录分隔符:
sed -i “s/$/\r/g” cnca.bin
Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle
利用sqlldr测试,发现能正常入库了:
Linux 将数据文件的记录分割符\n替换成\r\n,然后入Oracle