Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

154
Views
Printing Lines between two Two Pattern

I have a file like this:

text1
text2
Pattern1
text3
text4
Pattern1
text5
text2
text6
Pattern1
text7
text8
Pattern2
text2
text9
text10
text2
Pattern1
text11
text12
Pattern1
text13
text14
Pattern1
text15
text16
Pattern2
text1
text2
Pattern1
text3
text4
Pattern1
text5
text6
Pattern1
text7
text2
text8
Pattern2
text21
text22

I want to print ONLY

Pattern1
text7
text8
Pattern2
Pattern1
text15
text16
Pattern2
Pattern1
text7
text2
text8
Pattern2

i.e. if Pattern1 is followed by Pattern2, then print lines between Pattern1 and Pattern2. I don't want lines if Pattern1 is followed by Pattern1.

An awk command is highly appreciated.

I was trying like:

awk '/Pattern1/,/Pattern2' file \> output

but it gives all the lanes that appear between two successive Pattern1 also.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

You may use this awk:

awk '
/^Pattern1$/ {s = $0 ORS; next}
s != "" {s = s $0 ORS}
/^Pattern2$/ {printf "%s", s; s = ""}
' file

Pattern1
text7
text8
Pattern2
Pattern1
text15
text16
Pattern2
Pattern1
text7
text2
text8
Pattern2
over 4 years ago · Santiago Trujillo Report

0

$ awk '
/Pattern1/,/Pattern2/ {   # between the first start and end markers
    if(/Pattern1/)        # at the begin marker...
        b=$0              # ... reset buffer
    else 
        b=b ORS $0        # or keep on buffering
    if(/Pattern2/)        # at the end marker...
        print b           # ... it is time to output
}' file

head -4 of output:

Pattern1
text7
text8
Pattern2
...
over 4 years ago · Santiago Trujillo Report

0

Making a whole lot of assumptions about unstated requirements like whether to match to the first or last Pattern2, what to do if one or the other is missing from a file,what to do if both "patterns" occur on 1 line, etc.:

$ cat tst.awk
/Pattern1/ { f=1; rec="" }
f {
    rec = rec $0 ORS
    if ( /Pattern2/ ) {
        printf "%s", rec
        f = 0
    }
}

$ awk -f tst.awk file
Pattern1
text7
text8
Pattern2
Pattern1
text15
text16
Pattern2
Pattern1
text7
text2
text8
Pattern2

See also How do I find the text that matches a pattern?.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!