You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何格式化Unix Shell脚本中.sql文件生成的扁平文件输出

解决方案

SQL文件(Ggg.sql)调整

你需要修改SQL中的SET配置项,解决空行和分隔虚线问题,同时优化CSV输出格式:

  • 消除表头前空行:新增SET NEWPAGE NONE,关闭每页开头的默认空行输出
  • 移除表头下分隔虚线:新增SET UNDERLINE OFF,关闭表头分隔横线生成逻辑
  • 优化格式一致性:将SET TRIMSPOOL OFF改为SET TRIMSPOOL ON,去除行尾多余空格;新增SET COLSEP ',',强制列间用逗号分隔,避免默认空格填充

修改后的完整Ggg.sql内容如下:

Set pagesize 5000
Set linesize 700
Set trimspool on
Set heading on
Set feedback off
Set term off
Set verify off
Set newpage none
Set underline off
Set colsep ','
Spool xyz.csv;
Select * from table1 where column = '5';
SPOOL OFF;
EXIT;

注意:这里将Spool输出文件名统一为Shell脚本中用到的xyz.csv,解决原逻辑中文件名不匹配的问题。如果你的实际业务输出文件名有其他要求,同步调整两处的文件名即可。

Shell脚本(ABC.sh)优化(可选)

如果最终导出文件仍有残留空行,可在dos2unix命令后新增空行过滤逻辑,修改后的脚本如下:

a=`sqlplus -silent $Database_Connection_String @Ggg.sql`
mv xyz.csv xyz_$1.csv
dos2unix xyz_*.csv 2> /dev/null
# 过滤所有全空或仅含空格的行
sed -i '/^[[:space:]]*$/d' xyz_$1.csv
(cat body.txt; uuencode xyz_$1.csv xyz_$1.csv) | mailx -s "subject" name@email.com

注:原脚本中$Database name变量名含空格不符合Shell语法规范,建议调整为$Database_Connection_String这类不含空格的合法变量名。

内容的提问来源于stack exchange,提问作者Milagrin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:24:03