한 줄의 텍스트 출력에 텍스트를 추가하고 모두 파일에 저장하는 방법은 무엇입니까?

한 줄의 텍스트 출력에 텍스트를 추가하고 모두 파일에 저장하는 방법은 무엇입니까?

명령을 사용하여 SQL에 덤프되는 데이터베이스가 있고 create table예를 들어 테이블을 삭제하는 것과 같이 특정 개체에 주어진 명령을 적용하는 스크립트를 만들어야 합니다.

예를 들어 테이블을 삭제하는 경우 로 시작하는 행을 스캔하고 create table명령을 사용하여 세 번째 필드를 추출합니다 cut. 그런 다음 각 출력 줄 앞에 drop tablefollow 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;

관련 정보