Como posso acrescentar e adicionar texto à saída de texto de linha única e salvá-lo em um arquivo?

0

Eu tenho um banco de dados despejado para sql com comandos create table e eu preciso criar um script para aplicar um determinado comando a alguns dos objetos, como soltar a tabela como um exemplo.

No caso de descartar as tabelas, por exemplo, faço a varredura de linhas que começam com create table e extraio o terceiro campo com o comando cut . Depois disso eu quero prefixar cada linha de saída com um comando como drop table seguido por cascade; ou outros comandos adequados.

O comando que eu uso agora é cat datadump.sql | cut -d ' ' -f 1-3 | grep 'CREATE TABLE' | uniq | cut -d ' ' -f 3 .

Isso gera uma lista como

table1
table2
table3

que eu quero converter para

drop table table1 cascade;
drop table table2 cascade;

e salve um arquivo para ser executado quando necessário. Na verdade, eu gostaria de tornar o prefixo e o sufixo condicionais na entrada, mas por enquanto o texto literal simples deveria ser suficiente.

Aqui está uma entrada de amostra, conforme solicitado nos comentários:

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
);
    
por vfclists 11.05.2015 / 02:26

1 resposta

2

Usando o Awk (e assumindo que a saída que você deseja capturar é o terceiro campo):

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