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