用 ool unixshell生成文本文件

文章作者 100test 发表时间 2008:03:15 10:02:29
来源 100Test.Com百考试题网


比较熟悉使用ORACLE的人一般都会用spool命令来生成OS下的文本文件.

例如我们把scott.dept表生成文本文件的语句写成dept.sql,内容如下:

set pages 50000.
set lines 200.
set trims on.
set heading off.
spool /oracle_backup/log/test/dept.lst.
0select deptno||,||dname||,||loc from scott.dept.
spool off.

但是生成的文本文件头和尾里含有不需要的空行和提示信息(虚线里面是生成文本文件的详细内容):
----------------------------------------

10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
50,MARKETING,FOTTH WORTH
60,HEAD,Amercia

6 rows 0selected.

-----------------------------------------

我请教了kane,他写出来的del_head_tail_line.sh可以把文件头尾的行去掉,并生成新文件:

#!/bin/sh
#第一个参数是要处理的文件名
#第二个参数是文件头要去掉的行数
#第三个参数是文件尾要去掉的行数
#第四个参数是要输出的文件名
#created by [email protected]
lines=`wc -l $1 | awk {print $1}`
taillines=`expr $lines - $2`
tail -$taillines $1 > $1.tmp
headlines=`expr $taillines - $3`
head -$headlines $1.tmp > $4
rm $1.tmp

我们执行下面命令,就可以把不符合要求的行去掉,生成新文件1.txt

$./del_head_tail_line.sh dept.lst 1 3 1.txt

这样就解决了文本文件格式的问题.

具体应用举例:

因为工作需要,我经常要把一个小时或者一个星期变动过的数据生成文本文件上传到各个地区.

借用上面的方法, 我只需要写几个sql语句 unix shell程序,配合OS定时就可以自动来完成这些工作:

第一步: 写好用来生成文本文件的SQL语句(假设是/oracle_backup/bin/test.sql)

提示1: 如果有几个不同的查询条件,可以把两个查询结果用union all合并起来生成一个结果集

提示2: Tab键的ascii码是char(9)

相关文章


WindowsVista中的新增命令
用DMRC解除远程管理X 2的烦恼
给WindowsVista减肥删除不必要文件
给WindowsVista系统加入一键还原功能
用 ool unixshell生成文本文件
加密存储过程,授于其它用户执行
Linux下MySQL数据库二进制日志恢复方法
北京机电研究所2008年硕士研究生招生简章
新手学堂:嵌入式Linux文件系统详细介绍
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛