2016-02-16 24 views
0

喜從CSV刪除空行我用下面的腳本來創建Oracle數據庫CSV使用shell腳本用於Oracle

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

,你可以看到在第一行和第三行有空白行 但我希望沒有空行的文件。 任何幫助將不勝感激。

回答

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 

'heading on'是默認的,所以你必須對它進行設置。它允許在選擇開始時顯示列名。 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/[email protected] <<! 
... 
! 

您使用模擬交互式輸入的shell語言的here-document語法。所以把你的sql命令放在一個腳本中,例如script.sql,並執行

sqlplus user/[email protected] @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

+0

其工作只是真棒。你可以觀察到的另外一件事情我已經使用了一個單獨的查詢來創建標題有什麼方法可以消除它,並從給出結果的同一選擇查詢中獲取標題。 – DnA

+0

還有一件事,即使在使用SET TERMOUT OFF之後,在終端上得到輸出 – DnA

+0

@AmolSolanke編輯這篇文章並添加了對您的問題的回答 – miracle173

0
set trimspool on 

這會爲你工作

+0

已經嘗試過,但沒有工作 – DnA

0

把這個腳本

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

/home/ist/username.csv沒有,使用刪除線

grep "," /home/ist/username.csv > /home/ist/username2.csv 
# or 
sed -i '/^[^,]*$/ d' /home/ist/username.csv