2017-08-17 15 views
0

WHEREとGROUPの間のSQLコードですべての行を取得しようとしています。私は同じの複数の出現があります後awk複数の出現を含む1つのファイル内の2つの単語間のすべての行

awk '/WHERE/{p=1} p; /GROUP/{exit}' filename.txt

出力

WHERE something Some SQL code GROUP BY something

で始まりWHEREで終わるコードの複数のセクションがあります。私が出力したいファイルにGROUP BYを付ける

誰かが助けることができますか? sedと同様に動作,

awk '/WHERE/{f=1} f; /GROUP/{f=0}' file 

awk範囲演算子:

+1

'GROUP'条件を過ぎたところで' p'を '0'にリセットしてみてください。 – shellter

+0

私は不思議です - あなたのポーズされたコードはどういう意味ですか?それが何を意味するのか分かっているなら、あなたが望むことをするために変わることはまったく自明です。 –

+1

[awk範囲とテキストの選択]の可能な複製(https://stackoverflow.com/questions/43982874/awk-range-and-selection-of-text) – dawg

答えて

2

これらの線に沿って何かをするawkで優れています。しかし、変更するのは難しくawkが何をすることができるのかを制限します。

あなたのawkの習慣は、フラグ(というよりも範囲)を使用して含まれると、次のようなマークの間に印刷することが容易になります:範囲演算子を持つことは不可能である

$ echo "a 
b 
c 
--- 
d 
e 
f 
--- 
g 
h" | awk '/^---$/{f= ! f; next} f' 
d 
e 
f 

-1
awk '/WHERE/,/GROUP/' filename.txt 
+0

通常、単にポストするのではなく解決策を説明する方が良い匿名コードの行[良い答えを書くにはどうすればいいですか]と[コードベースの回答を完全に説明する](https://meta.stackexchange.com)を読むことができます。/questions/114762/explain-entire-%E2%80%8C%E2%80%8Bcode-based-answers)。 –

関連する問題