如何格式化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
相关产品推荐
相关产品推荐

