Awk में, आप इसे निम्नानुसार करेंगे
awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`
या
awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`
व्याख्या
पहला समाधान सभी रेखाओं को मिलाता है जो मेल खाती हैं pattern। जब यह एक मैच पाता है तो यह NRसरणी में रिकॉर्ड संख्या ( ) को संग्रहीत करता है nr। यह NRएक ही एरे से चौथे रिकॉर्ड को भी संग्रहीत करता है । यह द्वारा किया जाता है nr[NR+4]। प्रत्येक रिकॉर्ड ( NR) को यह देखने के लिए चेक किया जाता है कि क्या यह nrसरणी में मौजूद है , यदि ऐसा रिकॉर्ड मुद्रित है।
दूसरा समाधान अनिवार्य रूप से उसी तरह से काम करता है, सिवाय इसके कि जब उसका सामना होता है तो यह patternउस रेखा को प्रिंट करता है, और फिर 4 वें रिकॉर्ड को सरणी में आगे रखता है nr, फिर अगले रिकॉर्ड पर जाता है। फिर जब awkइस चौथे रिकॉर्ड का सामना NR in nrहोगा तो ब्लॉक निष्पादित हो जाएगा और इस +4 रिकॉर्ड को उसके बाद प्रिंट करेगा।
उदाहरण
यहाँ एक उदाहरण डेटा फ़ाइल, है sample.txt।
$ cat sample.txt
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16
1 समाधान का उपयोग करना:
$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt
4 blah
8
10 blah
14
दूसरा समाधान का उपयोग करना:
$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt
4 blah
8
10 blah
14
egrep "pattern" -A4