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

时间:2016-02-16 13:57:09

标签: oracle shell csv

您正在使用以下shell脚本从oracle数据库创建csv

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
!

我得到以下输出

enter image description here

你可以看到第一排和第三排有空行 但我期待没有空行的文件。 任何帮助将不胜感激。

5 个答案:

答案 0 :(得分:1)

使用

SET PAGESIZE 0

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

SET HEADING OFF

命令

SPOOL on

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

如果要显示带有列名称的标题 您可以尝试以下设置

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

'标题'是默认值,因此您不能设置它。它可以在选择开始时显示列名。 underline off禁止列名和选择数据之间的“---”行。 pages 50000将pagesize设置为其最大值(Oracle 11.2)。 linesize 32767将linesize设置为其最大值(Oracle 11.2)。 newpage none必须在页面开头抑制此空行,这是您发布的主要问题。 所有这些都可以在SQL*Plus Command Reference

中找到

termout off参数仅抑制由使用@或@@命令执行的脚本创建的输出。它不会被SQL * plus控制台中输入的命令抑制掉。如果你使用

sqlplus user/passw@connect <<!
...
!

您使用shell语言的here-document语法来模拟交互式输入。所以把你的sql命令放在一个脚本中,例如script.sql,并执行

sqlplus user/passw@connect @script.sql

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

而不是

colsep ,
select username,userid
...

返回类似

的内容
user1                 ,          14
nextuser              ,         236
myuser                ,          11
...

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

select username||','||userid
...

获取以下输出

user1,14
nextuser,236
myuser,11
...

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

答案 1 :(得分:0)

set trimspool on

这对你有用

答案 2 :(得分:0)

将此放在您的脚本上

sed -i '/^\s*$/d'/home/ist/username.csv

答案 3 :(得分:0)

使用

删除/home/ist/username.csv中没有,的行
grep "," /home/ist/username.csv > /home/ist/username2.csv
# or
sed -i '/^[^,]*$/ d' /home/ist/username.csv

答案 4 :(得分:0)

SQLPLUS 12.2具有输出CSV的功能,但您需要配置一些设置以删除其上的空白行。这是我的方法

SET HEADING OFF;
SET PAGES 0;
SET SQLBLANKLINES ON;
set echo off;
set autotrace off;
set feedback off;
SET TRIM ON;
SET MARKUP CSV ON DELIMITER | QUOTE OFF;