मैं कुछ लाइनें निकालना चाहता हूं awk
। क्या निम्न कार्य करना संभव है:
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
मैं लाइन संख्या 122 से 129 तक विवरण कैसे प्रदर्शित कर सकता हूं?
मैं कुछ लाइनें निकालना चाहता हूं awk
। क्या निम्न कार्य करना संभव है:
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
मैं लाइन संख्या 122 से 129 तक विवरण कैसे प्रदर्शित कर सकता हूं?
जवाबों:
आप समझ नहीं पाए हैं कि कैसे awk
काम करता है। निर्दिष्ट किए गए "प्रोग्राम" को इनपुट के प्रत्येक पंक्ति (या "रिकॉर्ड रिकॉर्ड में) के लिए हमेशा एक बार निष्पादित किया जाता है , इसके लिए FOR
या किसी भी समान निर्माण की कोई आवश्यकता नहीं है । महज प्रयोग करें:
क्रिया विधि
ls -l | awk 'NR>=122 && NR<=129 { print }'
अधिक कॉम्पैक्ट विधि
ls -l | awk 'NR==122,NR==129'
Ths एक के लिए एक सीमा देता है NR
, जो "नंबर रिकॉर्ड" है, आमतौर पर यह वर्तमान लाइन awk
प्रसंस्करण है।
awk
ऐसे कार्य के लिए विशिष्ट कोड आमतौर पर है ls -l | awk 'NR==122,NR==129'
।
एक और वैकल्पिक विधि का उपयोग करना होगा sed
:
ls -l | sed -ne '122,129p'
लेकिन अगर, जैसा कि आपका सवाल बताता है, इसके लिए awk का उपयोग करना महत्वपूर्ण है, ज़राम के जवाब पर मैनटवर्क की टिप्पणी के साथ जाएं। जैसा कि awk के प्रलेखन में कहा गया है:
A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second.
इसलिए यदि आप चाहें, तो आप अधिक उन्नत स्थितियां भी बना सकते हैं। उदाहरण के लिए:
ls -l | awk 'NR==122,/foobar/'
यह लाइन 122 पर आउटपुट शुरू करेगा, और तब तक जारी रहेगा जब तक एक लाइन में "फोब्बर" शब्द शामिल नहीं होता।
यदि आप हमें वास्तविक उपयोग का मामला बताते हैं , तो हम बेहतर समाधान प्रदान करने वाले उत्तरों की मदद कर सकते हैं। मुझे चिंता है कि यह एक XY समस्या की तरह लग रहा है ।
awk 'NR == 122,NR == 129{print $0}' file
यहां हम फाइल के 122 से 129 तक लाइन्स निकाल सकते हैं।
$0
122 और 129 लाइनों के बीच पूरे फ़ाइल डेटा को प्रिंट करने के लिए उपयोग किया जाता है।
sed
विधि का सुझाव देता हूं , चूंकिsed
बहुत छोटा है (और तेजी से लोड होता है)awk
।