删除开始的头两行
删除空行
实现了STRORAGE,PCTFREE,TABLESPACE的换行
去掉双引号(")
以逗号结尾换新行
如果加上egrep -v 'STORAGE|PCTFREE|TABLESPACE|PARTITION'还可去掉存储字句
在最后一行增加 /
impshow2sql.sh
#!/bin/bash
awk ' BEGIN { prev=";" }
    / \"CREATE / { N=1; }
    / \"ALTER / { N=1; }
    / \"ANALYZE / { N=1; }
    / \"GRANT / { N=1; }
    / \"COMMENT / { N=1; }
    / \"AUDIT / { N=1; }
    N==1 { printf "\n/\n\n"; N++ }
    /\"$/ { prev=""
if (N==0) next;
        s=index( $0, "\"" );
        if ( s!=0 ) {
                printf "%s",substr( $0,s+1,length( substr($0,s+1))-1 )
                prev=substr($0,length($0)-1,1 );
                    }
        if (length($0)<78)
                printf( "\n" );}' $* |
                sed '1,2d;/^$/d;
                s/PCTFREE/~&/g;
                s/STORAGE *(I/~STORAGE(I/g;
                s/) TABLESPACE/)~TABLESPACE/g;
                s/[( ]PARTITION /~&/g;
                s/, "/,~ "/g;
                s/ (\"/~&/g;
                s/ , / ,~/g;
                s/ )/)/g;
                s/"//g'|tr "~" "\n" #|egrep -v 'STORAGE|PCTFREE|TABLESPACE|PARTITION'
echo "/"
使用指南
生成sql脚本
cd /pgold/dmp for i in `ls *.dmp` do imp user/password fromuser=fuser touser=fuser file=$i log=$i.sql show=y statistics=none done修改脚本权限为755
chmod 755 impshow2sql.sh执行脚本
./impshow2sql.sh /tmp/showfile > /tmp/imp.sql
	for i in `ls *.sql`
do
./impshow2sql.sh $i > ${i}_new.sql
done
创建对象
sqlplus user/password @/tmp/imp.sql导入数据
for i in `ls *.dmp`
do
imp user/password fromuser=fuser touser=fuser file=$i log=$i.log ignore=y statistics=none
done
for a in {6..1}
do
/pgold/zzdi/scripts/general.sh $a
done
修改表空间的名字,可以在上面语句egrep之前加上下面的内容可实现        awk '{ for (i=1;i<=NF;i++) 
        if ($i != "TABLESPACE" && $i != "STORAGE(INITIAL") 
             printf("%s ",$i); 
          else 
             { 
                if ($i == "TABLESPACE") 
                   printf("TABLESPACE USERS "); 
                if ($i == "STORAGE(INITIAL") 
                   printf("STORAGE( "); 
                i++; 
             } 
        printf("\n"); 
	
A.不生成CREATE开始的语句
 \"CREATE / { N=1; }
  修改为
  \"CREATE / { N=0; }
B.只生成CREATE TRIGGER字句  把之前的N=1全部改为N=0,增加下面的行
  / \"CREATE TRIGGER/ { N=1; }
C.如果不生成创建语句的存储字句,可以去掉impshow2sql脚本中的##|egrep -v 'STORAGE|PCTFREE|TABLESPACE|PARTITION'
	
下面的脚本可以修改表空间,但是比较乱(educational purposes only)
#!/usr/bin/ksh 
grep '^ \"' <$1 | sed -e 's/^ \"//g' -e 's/\"//g' | 
awk '{ 
       if ($1=="ALTER" || $1=="GRANT" || $1=="CREATE") printf(";\n\n%s\n",$0); else printf("%s\n",$0); 
     }' | sed -e 's/ $/ ~/g' -e 's/^ /~ /g' | 
awk '{ if (NF>1) 
         { 
           for(i=1;i<NF;i++) 
              printf("%s ",$i); 
           printf("\n%s",$NF); 
         } 
       else 
          printf("%s\n",$0); 
     }' | 
awk '{ if ($NF == "TABLESPACE" || $NF == "STORAGE(INITIAL") 
         { 
           for(i=1;i<NF;i++) 
              printf("%s ",$i); 
           printf("\n%s ",$NF); 
         } 
       else 
          printf("%s\n",$0); 
     }' | sed 's/~/ /g' | 
awk '{ for (i=1;i<=NF;i++) 
          if ($i != "TABLESPACE" && $i != "STORAGE(INITIAL") 
             printf("%s ",$i); 
          else 
             { 
                if ($i == "TABLESPACE") 
                   printf(" TABLESPACE USERS "); 
                if ($i == "STORAGE(INITIAL") 
                   printf("STORAGE( "); 
                i++; 
             } 
        printf("\n"); 
     }' |sed -e '1,1s/;//g' | 
egrep -v '^$' 
echo ";"
Reference
https://en.wikipedia.org/wiki/AWK
http://tldp.org/LDP/abs/html/sedawk.html
https://www.gnu.org/software/gawk/manual/gawk.html
http://www.grymoire.com/Unix/Sed.html
http://www.grymoire.com/Unix/Awk.html
https://www.gnu.org/software/sed/manual/sed.html
	Unix Script: IMPSHOW2SQL - Extracting SQL from an EXPORT file (Doc ID 29765.1)
Import Tables From An Export Dump To A Different Tablespace (Doc ID 372992.1)
	
	
	
 
