1

I am trying to take a text file called 'input', of the form

line1 
line2
line3
PATTERN
x y z
x y z
lineN

and use awk to place a number (1) after each "x y z" line. I need the lines before the PATTERN and after the "x y z' lines (lineN) in the output. The output I needs looks like this:

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

What I have so far is:

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

This gives:

x y z   1

Is it possible to set up a loop to get awk to append an arbitrary number of "x y z" lines or stop after the "x y z" type lines finish?

2
  • I edited to look more file like. do you need remplacement after PATTERN (and x y z might be 1 2 3 or foo what ever) or editing only line with x y z ?
    – Archemar
    Mar 4 '15 at 11:09
  • Thank you, I didn't know how to represent it in the fashion you have changed it to. Yes replacement after the PATTERN is found. x y z are just three columns only the lines with x y z should be appended if possible. Mar 4 '15 at 11:13
1

The looping can help:

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

Or to extend @Janis idea:

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

You are saying that only the literal "x y z" lines after PATTERN shall be replaced.

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

If it's lines with three arbitrary fields then use

awk '
  /PATTERN/ { f=1 }
  f && NF==3 { print $0, 1 ; next }
  { print }
'
4
  • If OP wants to print lines after PATTERN and before lineN (as one block) you have to add f=0 after block finish.
    – Costas
    Mar 4 '15 at 11:38
  • Costas, the OP's sample as presented did not suggest that lineN is a pattern like "PATTERN" that terminates a block; as described it's just a continuation of the data line1, line2, ..., lineN, or so it seems at least.
    – Janis
    Mar 4 '15 at 11:42
  • lineN can have 3 fields too... In any way OP should some how indicate difference between x y z and lineN to fix position where script should stop to add 1
    – Costas
    Mar 4 '15 at 11:51
  • Indeed the actual requirements would need clarification. I'm sure the OP will come back to ask if necessary once he switches from his sample data to the real data.
    – Janis
    Mar 4 '15 at 11:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.