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'

答え2

PATTERNの後の「xy z」の行だけを変更しなければならないという意味です。

awk '
  /PATTERN/ { f=1 }
  f && /x y z/ { print $0, 1 ; next }
  { print }
'

3つのランダムフィールドがある行の場合は、次を使用します。

awk '
  /PATTERN/ { f=1 }
  f && NF==3 { print $0, 1 ; next }
  { print }
'

関連情報