দারুণভাবে, আপনি নীচের হিসাবে এটি করতে চাই
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
একই অ্যারে থেকে 4 র্থ রেকর্ড সংরক্ষণ করে । এটি দ্বারা করা হয় 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