说我有表A的列
col1 col2 col3 col4
-------------------
sajal singh 28 IND
hello how are you
我想将数据导出为平面文件,列之间没有空格或制表符 所以输出应该是
cat dump
sajalsingh28IND
hellohowareyou
我试过的是什么。我写了一个剧本
#!/usr/bin/bash
#the file where sql output will go
OUT=report.txt
>$OUT
DESC=desc.txt
>$DESC
sqlplus -s "xxx/xxx@xxx" << END_SQL > /dev/null
set pages 0
set feedback off
set heading off
set trimspool off
set termout off
set verify off
set wrap off
SPOOL $DESC
Select * from table_name;
SPOOL OFF
END_SQL
但我在多行中使用制表符/空格
获取一行的输出谢谢
答案 0 :(得分:3)
如果您已有CSV转储,则可以运行以下命令:
awk 'BEGIN{FS=",";OFS=""}{$1=$1}1' csv.dump > new.dump
SET HEADING OFF
SET FEEDBACK OFF
SPOOL $DESC
SELECT col1 ||''|| col2 ||''|| col3 FROM table_name;
SPOOL OFF;
答案 1 :(得分:2)
从简化的oracle视图&#34;到&#34;普通&#34; sed的字符:
sed -n '3,$ s/\s//gp' file
$cat file col1 col2 col3 col4 ------------------- sajal singh 28 IND hello how are you $sed -n '3,$ s/\s//gp' file sajalsingh28IND hellohowareyou
说明:将所有空格(不是换行符)从第3行替换为EOF,使用&#34;没有&#34;。
答案 2 :(得分:1)
如果您希望列填充但列之间没有其他空格,则可以执行以下操作:
set colsep ""
默认情况是在双引号之间有一个空格,这会在列之间放置一个空格。您可能还想这样做:
set tab off
...确保填充中的多个空格不会转换为制表符,这看起来很好用于显示,但解析文件会很麻烦。
如果您根本不需要空格,要在SQL * Plus中执行此操作,您需要连接列:
select col1 || col2 || col3 || col4 from table_name;
如果您在列之间放置分隔符(例如将其设置为CSV),这很有用,但如果您将所有内容压缩在一起,我不知道您可以对文件中的数据执行什么操作分隔符。
答案 3 :(得分:1)
所以这就是我提出的:它将在列之间没有任何空格等转储oracle数据,同时保留数据中的空格。我想我会和你分享。
#!/usr/bin/bash
#the file where sql output will go
OUT=report.txt
>$OUT
DESC=desc.txt
>$DESC
TABLE_NAME=$1
###GET DESCRIBE####
s=""
#######################
sqlplus -s "xxx/xxx@xxx" << END_SQL > /dev/null
set pages 0
set feedback off
set heading off
set trimspool off
set termout off
set verify off
set wrap off
SPOOL $DESC
desc $TABLE_NAME;
SPOOL OFF
END_SQL
#######################
for i in `cat $DESC|awk -F" " '{print $1}'|grep -v -i name|grep -v -`
do
s=$s"trim($i)||'|'||"
done
s=`echo $s|sed "s/||'|'||$//g"`
echo $s
#######################
#sqlplus - silent mode
#redirect /dev/null so that output is not shown on terminal
sqlplus -s "xxx/xxx@xxx" << END_SQL > /dev/null
set pages 0
set feedback off
set heading off
set trimspool off
set termout off
set verify off
set colsep ""
set tab off
set lines 1500
SPOOL $OUT
select $s from $TABLE_NAME;
SPOOL OFF
END_SQL
#######################
cat $OUT|sed "s/|//g"|sed "s/ *$//g" >$OUT.new
mv $OUT.new $OUT
echo Finished writing report $OUT