कुछ लाइनों के लिए awk कैसे चलाएं।?


18

मैं कुछ लाइनें निकालना चाहता हूं awk। क्या निम्न कार्य करना संभव है:

ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'

मैं लाइन संख्या 122 से 129 तक विवरण कैसे प्रदर्शित कर सकता हूं?


यदि आप एक पाश में ऐसा करने के लिए थे, तो मैं sedविधि का सुझाव देता हूं , चूंकि sedबहुत छोटा है (और तेजी से लोड होता है) awk
zrajm

जवाबों:


36

आप समझ नहीं पाए हैं कि कैसे awkकाम करता है। निर्दिष्ट किए गए "प्रोग्राम" को इनपुट के प्रत्येक पंक्ति (या "रिकॉर्ड रिकॉर्ड में) के लिए हमेशा एक बार निष्पादित किया जाता है , इसके लिए FORया किसी भी समान निर्माण की कोई आवश्यकता नहीं है । महज प्रयोग करें:

क्रिया विधि

ls -l | awk 'NR>=122 && NR<=129 { print }'

अधिक कॉम्पैक्ट विधि

ls -l | awk 'NR==122,NR==129'

Ths एक के लिए एक सीमा देता है NR, जो "नंबर रिकॉर्ड" है, आमतौर पर यह वर्तमान लाइन awkप्रसंस्करण है।


6
वास्तव में awkऐसे कार्य के लिए विशिष्ट कोड आमतौर पर है ls -l | awk 'NR==122,NR==129'
मैनटवर्क


@ShihabudheenKM की नज़र इस पर
पड़ सकती है

8

एक और वैकल्पिक विधि का उपयोग करना होगा 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 समस्या की तरह लग रहा है


2

awkकोरुटिल्स का उपयोग करके ऐसा करने का एक और तरीका (हालांकि मैं इस पद्धति को पसंद करता हूं ):

ls -l | tail -n +122 | head -n 8

0
 awk  'NR == 122,NR == 129{print $0}'  file

यहां हम फाइल के 122 से 129 तक लाइन्स निकाल सकते हैं।

$0 122 और 129 लाइनों के बीच पूरे फ़ाइल डेटा को प्रिंट करने के लिए उपयोग किया जाता है।


1
डुप्लिकेट उत्तर का unix.stackexchange.com/a/89641/72456
αғsнι 8:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.