awkを使用してパターンの後に入力ファイルを追加する(ループ?)

awkを使用してパターンの後に入力ファイルを追加する(ループ?)

次の形式の「input」というテキストファイルを取得しようとしています。

line1 
line2
line3
PATTERN
x y z
x y z
lineN

次に、awkを使用して各「xy z」行の後に数字(1)を入れます。出力では、PATTERNの前と「xy z」行(lineN)の後に行が必要です。必要な出力は次のとおりです。

line1
line2
line3
PATTERN
x y z   1 
x y z   1
lineN

私が今まで持っているのは次のとおりです。

awk '/PATTERN/ {getline; print $0 "   1" }' < input > output 

これは以下を提供します:

x y z   1

awkが「xy z」行を必要な数だけ追加したり、「xy z」タイプの行が完了したら停止するようにループを設定できますか?

ベストアンサー1

ループが役に立つかもしれません:

awk '/PATTERN/{print;getline;while(!/lineN/){$(NF+1)="  1";print;getline}}1'

または延長@ジェニスのアイデア:

awk '/lineN/{f=0}f{$(NF+1)="  1"}/PATTERN/{f=1}1'

おすすめ記事