How to print 5 consecutive lines after a pattern in file using awk

Another way to do it in AWK:

awk '/PATTERN/ {for(i=1; i<=5; i++) {getline; print}}' inputfile

in sed:

sed -n '/PATTERN/{n;p;n;p;n;p;n;p;n;p}' inputfile

in GNU sed:

sed -n '/PATTERN/,+7p' inputfile

or

sed -n '1{x;s/.*/####/;x};/PATTERN/{:a;n;p;x;s/.//;ta;q}' inputfile

The # characters represent a counter. Use one fewer than the number of lines you want to output.


grep "PATTERN" search-file -A 5 will do the job for you if decide to give grep a chance.

Edit: You can call grep using system() function from inside your awk script as well.


awk '
{ 
    if (lines > 0) {
        print;
        --lines;
    }
}

/PATTERN/ {
    lines = 5
}

' < input

This yields:

#Line1
#Line2
#Line3
#Line4
#Line5

Tags:

Unix

Shell

Awk