
次の形式の「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 }
'