.txt 파일에서 테이블 이름을 필터링하는 방법

.txt 파일에서 테이블 이름을 필터링하는 방법
select *
 from 
emp;


select *
 from
 dept;

selection
end;

나는 다음과 같은 출력을 얻고 싶습니다.

select *
 from 
emp;


select *
 from
 dept;

나는 다음을 사용하려고합니다 :

awk '/select/{a=1} a; /;/{a=0}' XXARXADLMT.txt 

산출:

select *
 from 
emp;


select *
 from
 dept;

selection
end;

답변1

이를 수행하는 방법은 다양할 수 있습니다. 지금 내가 생각하는 것은 grep그것의 -B& -A플래그를 사용하는 것입니다

$ grep -B 1 -A 1 'from' file.txt

빈 줄을 원하면 -A2로 설정하세요.

답변2

Ziggy가 말했듯이 무엇이 필요한지 확실하지 않지만 아마도 이 AWK가 그 효과를 발휘할 것입니다.

awk ' /select \*$/{flag=1;print;next}/selection/{flag=0}flag' file.txt 

답변3

명령이 끝나면 다음을 ;수행할 수 있습니다.

 awk -v RS=";" '/from/' file

"from" 뒤에 테이블 이름만 원하는 경우 시도해 볼 수 있습니다.

 perl -0nE 'say join(";", /from\s+(\w+)/ig)' file

답변4

항목이 항상 빈 줄로 구분되어 있다고 가정하면 다음을 수행할 수 있습니다.

awk 'BEGIN{RS="\n\n"; FS="\n"; OFS="\n"; ORS="\n\n";} {if ($1 ~ /\<select\>/) {print};}' file.txt

입력 파일:

select *
 from 
emp;

select *
 from
 dept;

selection
end;

select something
more

selected
wrong

select
again
*
from class;

산출:

select *
 from 
emp;

select *
 from
 dept;

select something
more

select
again
*
from class;

select정확한 첫 번째 단어가 포함된 텍스트 블록만 선택됩니다.

관련 정보