如何将文本附加到单行文本输出并将其全部保存到一个文件?

如何将文本附加到单行文本输出并将其全部保存到一个文件?

我有一个使用命令转储到 sql 的数据库create table,我需要创建一个脚本来将给定的命令应用于某些对象,例如删除表作为示例。

例如,在删除表的情况下,我扫描以开头的行create table并使用命令提取第三个字段cut。之后,我想在每个输出行前面添加一个命令,例如drop table后跟cascade;或其他合适的命令。

我现在使用的命令是cat datadump.sql | cut -d ' ' -f 1-3 | grep 'CREATE TABLE' | uniq | cut -d ' ' -f 3.

这会输出一个类似的列表

table1
table2
table3

我想转换成

drop table table1 cascade;
drop table table2 cascade;

等并将其保存为需要时运行的文件。事实上,我想让前缀和后缀以输入为条件,但现在简单的文字文本就足够了。

以下是评论中要求的一些示例输入:

CREATE TABLE agency (
    agrecordid integer DEFAULT nextval(('agency0_pk_seq'::text)::regclass) NOT NULL,
    agidcode1 character(20) NOT NULL,
    ...,
    ...,
    agaddress1 character(40),
    agtown character(40),
    agfax2 character(20),
    agemail character(20)
);

CREATE TABLE agency_contact (
    recordid integer DEFAULT nextval(('agencon0_pk_seq'::text)::regclass) NOT NULL,
    agencyid integer,
    name character varying(35),
    ...,
    ...,
    email2 character varying(30),
    deptorperson character(1),
    notes text
);

答案1

使用 Awk(并假设您希望捕获的输出第三个字段):

awk '/CREATE TABLE/ {printf "%s\n", "drop table "$3" cascade;"}' datadump.sql
drop table agency cascade;
drop table agency_contact cascade;

相关内容