.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正確な最初の単語を含むテキストブロックのみが選択されます。

関連情報