首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用oracle的shell脚本从csv中删除空行

使用oracle的shell脚本从csv中删除空行
EN

Stack Overflow用户
提问于 2016-02-16 13:57:08
回答 4查看 5.1K关注 0票数 0

Hi正在使用下面的shell脚本从oracle数据库创建csv

代码语言:javascript
代码运行次数:0
运行
复制
export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
export PATH=$PATH:$ORACLE_HOME/bin
sqlplus -s user1/user1<<!
Spool on
set heading off
SET FEEDBACK OFF
set wrap off
set colsep ,
SET LINESIZE 200
set trims on
Spool /home/ist/username.csv
select 'username','userid' from dual;
select username,userid from users;
Spool off
EXIT
!

我得到了如下输出

如您所见,在第一行和第三行都有空行,但希望文件没有空行。任何帮助都将不胜感激。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-16 16:10:53

使用

代码语言:javascript
代码运行次数:0
运行
复制
SET PAGESIZE 0

命令以避免空行。这也会取消列标题,因此可以删除

代码语言:javascript
代码运行次数:0
运行
复制
SET HEADING OFF

命令

代码语言:javascript
代码运行次数:0
运行
复制
SPOOL on

没有意义,因为它在名为on.lst的文件中启动假脱机。所以也删除这个命令。

如果要显示具有列名的标题,可以尝试以下设置

代码语言:javascript
代码运行次数:0
运行
复制
set HEADING ON
SET FEEDBACK OFF
set WRAP OFF
set COLSEP ,
SET LINESIZE 32767
set NEWPAGE none
set UNDERLINE OFF
set TRIMSPOOL ON
set TRIMOUT ON
set PAGESIZE 50000

标题是默认的,所以你不能设置它。它允许在select启动时显示列名。underline off会取消“--”列名与select数据之间的行。pages 50000将页面大小设置为其最大值(Oracle11.2)。linesize 32767将行大小设置为其最大值(Oracle11.2)。newpage none是必要的,以抑制这个空行在一个页面的开头,这是您的帖子的主要关注事项。所有这些都可以在加命令参考中找到。

termout off参数只取消使用@或@命令执行的脚本创建的输出。它不会被SQL*plus控制台中输入的命令取消。如果您使用

代码语言:javascript
代码运行次数:0
运行
复制
sqlplus user/passw@connect <<!
...
!

您可以使用shell语言的这里文档语法来模拟交互输入。因此,将sql命令放在脚本中,例如script.sql,然后执行

代码语言:javascript
代码运行次数:0
运行
复制
sqlplus user/passw@connect @script.sql

然后termout off将抑制终端输出。

而不是

代码语言:javascript
代码运行次数:0
运行
复制
colsep ,
select username,userid
...

它返回的内容如下

代码语言:javascript
代码运行次数:0
运行
复制
user1                 ,          14
nextuser              ,         236
myuser                ,          11
...

您可以使用保持COLSEP不变并执行

代码语言:javascript
代码运行次数:0
运行
复制
select username||','||userid
...

以获得以下输出

代码语言:javascript
代码运行次数:0
运行
复制
user1,14
nextuser,236
myuser,11
...

也许这是有用的https://dba.stackexchange.com/a/64620/2047

票数 2
EN

Stack Overflow用户

发布于 2016-02-16 14:19:05

代码语言:javascript
代码运行次数:0
运行
复制
set trimspool on

这个会对你有用的

票数 0
EN

Stack Overflow用户

发布于 2016-02-16 15:05:57

把这个写在你的剧本上

代码语言:javascript
代码运行次数:0
运行
复制
sed -i '/^\s*$/d'/home/ist/username.csv
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35434513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档