如果您有用sqlplus做了转储和输出是乱码有人没有之前设置的3个值,有一个出路。
就在几个小时前DB管理员发送给我看在sqlplus中执行查询的难看输出(我不知道,也许他恨我......)。我必须找到一条出路:这是一个awk脚本来解析输出,使其至少更具可读性。这并不完美,但我没有足够的时间正确地打磨它。无论如何,它做得很好。
awk ' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"\n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)} BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""} { addLn(); if(!isLoaded()){next}; l=1; if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}} }END{if(val!="")print val}'
如果任何人想尝试改进这个脚本,下面是变量: hnames - 列名头,HDASH - 破灭的标题下方,H - 我是否当前解析头文件(然后== 1),val - 数据,_d - - 在hnames和hdash之间进行交换,ln0 - 最后一行读取,ln1 - 之前读取的行(这是我实际使用的行),ln2 - line ln1之前读取
快乐解析!
哦,差点忘了......我用它来美化sqlplus中输出自己:
[[email protected] ~]$ cat prettify_sql
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "
COLSEP是可选的,但它使输出看起来像sqlite的哪一个更容易使用脚本来解析。
编辑: 解析和非解析输出的一个小预览
errr ..我想向他们展示就像一个正常的表。一个接一个 – Nubkadiya 2010-06-09 13:51:40