다음 내용이 포함된 테스트 파일이 있습니다.
CREATE TABLE XYZ (
ABC INT,
CDE CHAR(10),
.
.
.
);
Similarly, REPLACE VIEW XYZ (
ABC,
CDE,
EFG
);
CREATE TABLE XYZ_1 (
ABC INT,
CDE CHAR(10),
.
.
.
);
Similarly, REPLACE VIEW XYZ (
ABC,
CDE,
EFG
);
이제 이 테스트 단일 파일을 2개의 파일로 분할하고 싶습니다. 한 파일에는 ill as CREATE
문이 포함되어 있고 다른 파일에는 til 문이 포함되어 있습니다 .;
file1
file2
REPLACE
;
이것을 분할하는 방법을 알려 주실 수 있나요?
답변1
방법은 다음과 같습니다 sed
.
sed -n 'H # append every line to hold buffer
/CREATE\|REPLACE/h # if CREATE or REPLACE, overwrite hold buffer
/;/{ # if line matches ; then
x # exchange hold space w. pattern space
/CREATE/w file1 # if pattern space matches CREATE, write to file1
/REPLACE/w file2 # if it matches REPLACE, write it to file2
}
' infile
답변2
다음 awk
스크립트를 사용해 보세요.
/CREATE/{
b="";
while (match($0, ";$")==0)
{
b=b $0"\n";
getline;
}
b=b $0;
print b > "file1";
}
/REPLACE/{
c="";
while (match($0, ";$")==0)
{
c=c $0"\n";
getline;
}
c=c $0;
print c > "file2";
}
그래서
awk -f some.awk inputFile
생산하다:
고양이 파일 1
CREATE TABLE XYZ (
ABC INT,
CDE CHAR(10),
.
.
.
);
CREATE TABLE XYZ_1 (
ABC INT,
CDE CHAR(10),
.
.
.
);
그리고
고양이 파일 2
Similarly, REPLACE VIEW XYZ (
ABC,
CDE,
EFG
);
Similarly, REPLACE VIEW XYZ (
ABC,
CDE,
EFG
);
답변3
sed -e '/CREATE/,/;/s/^//w file1' -e//d <infile >file2
...그냥 범위를 무효화할 뿐입니다. 모든 행을 씁니다.CREATE ... ;
범위는 file1이고 다른 모든 범위는 file2입니다.
더 간단하게 말하면 다음과 같습니다.
sed -ne '/CREATE/,/;/w file1' -e '/REPLACE/,/;/w file2' <infile
...실제 입력이 예제 데이터만큼 간단하지 않은 경우 중복될 수 있습니다.
그러나 샘플 데이터를 사용하여 두 명령 중 하나를 실행하고 다음을 수행할 수 있습니다.
head -n50 file[12]
...다음과 같은 출력이 생성됩니다.
==> file1 <==
CREATE TABLE XYZ (
ABC INT,
CDE CHAR(10),
.
.
.
);
CREATE TABLE XYZ_1 (
ABC INT,
CDE CHAR(10),
.
.
.
);
==> file2 <==
Similarly, REPLACE VIEW XYZ (
ABC,
CDE,
EFG
);
Similarly, REPLACE VIEW XYZ (
ABC,
CDE,
EFG
);