इस सवाल के अब तक कई अच्छे जवाब दिए गए हैं, लेकिन मैं अभी भी एक awk
का उपयोग नहीं करने के साथ याद आती है getline
। चूंकि, सामान्य तौर पर , इसका उपयोग करना आवश्यक नहीं है getline
, मैं इसके लिए जाऊंगा:
awk ' f && NR==f+1; /blah/ {f=NR}' file #all matches after "blah"
या
awk '/blah/ {f=NR} f && NR==f+1' file #matches after "blah" not being also "blah"
तर्क हमेशा उस रेखा को संचय करने में होता है जहाँ "ब्ला" पाया जाता है और फिर उन पंक्तियों को मुद्रित किया जाता है जो एक पंक्ति के बाद होती हैं।
परीक्षा
नमूना फ़ाइल:
$ cat a
0
blah1
1
2
3
blah2
4
5
6
blah3
blah4
7
"ब्लाह" के बाद सभी पंक्तियों को प्राप्त करें। यह एक और "ब्लाह" को प्रिंट करता है यदि यह पहले एक के बाद दिखाई देता है।
$ awk 'f&&NR==f+1; /blah/ {f=NR}' a
1
4
blah4
7
"ब्लाह" के बाद सभी पंक्तियों को प्राप्त करें यदि उनके पास "ब्ला" न हो।
$ awk '/blah/ {f=NR} f && NR==f+1' a
1
4
7
-A1
विकल्प की तलाश में यहां आएंगे