1行のテキスト出力にテキストを追加し、すべてファイルに保存する方法は?

1行のテキスト出力にテキストを追加し、すべてファイルに保存する方法は?

コマンドを使用してSQLにダンプされるデータベースがあり、たとえばcreate tableテーブルを削除するなど、特定のオブジェクトに指定されたコマンドを適用するスクリプトを作成する必要があります。

たとえば、テーブルを削除する場合は、で始まる行をスキャンし、create tableコマンドを使用して3番目のフィールドを抽出しますcut。次に、各出力行の前にdrop tablefollowcascade;やその他の適切なコマンドなどのコマンドを追加したいと思います。

今私が使用している命令はです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を使用(そして出力をキャプチャすると仮定)はい3番目のフィールド):

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

関連情報