【发布时间】:2018-09-27 20:18:14
【问题描述】:
我有一个来自 informix 数据库导出的 file.sql 文件。
以下是文件的一小部分(我稍微更改了数据以使其匿名):
grant dba to "xxx";
grant dba to "yyy";
grant dba to "zzz";
{ TABLE "xxx".table1 row size = 66 number of columns = 5 index size = 54 }
{ unload file name = table00100.unl number of rows = 307 }
create table "xxx".table1
(
field1 char(2) not null ,
field2 char(10) not null ,
field3 char(30),
field4 char(20) not null ,
field5 date not null
);
revoke all on "xxx".table1 from "yyy";
我需要从这个文件中将 table00100.unl 文件重新命名为原始表名。所以我需要这样的输出:
mv table00100.unl table1
我已经设法在两个文件之间使用了一点 awk 和 sed,但是如果没有中间的临时文件,这不是更简单吗?我的代码示例:
awk '{for(i=1;i<=NF;i++) {if ($i=="unload") {print $(i+4)} else {if ($i=="TABLE") print $(i+1)}}}' file.sql | sed 's/".*".//' > temp.out
awk 'NR%2{printf "%s ",$0;next;}1' temp.out | awk '{for (i=NF;i>0;i--) if (i > 1) printf("mv %s ",$i); else printf("%s\n",$i)}' > temp.shl
【问题讨论】: