awk - किसी फ़ाइल में पहली n लाइनों के लिए वर्णों की संख्या कैसे प्रिंट करें?


10

मेरे पास एक आदेश है:

$ awk '{ print length($0); }' /etc/passwd

यह पासवार्ड फ़ाइल में हर लाइन के वर्णों की संख्या प्रिंट करता है:

52
52
61
48
81
58
etc.

मैं केवल पहली n लाइनों के लिए वर्णों की संख्या कैसे प्रिंट कर सकता हूं?

उदाहरण के लिए - पहली 3 लाइनों के लिए यह कुछ ऐसा देगा:

52
52
61

@ilkkachu सच।
njzk2

यदि आप रिक्त को अनदेखा करना चाहते हैं, तो नीचे का उपयोग करें - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN कुमार

जवाबों:


17

बताओ awkजब पर्याप्त लाइनों को पढ़ कर दिया है छोड़ने की:

awk '$0 = length; NR==3 { exit }' /etc/passwd

ध्यान दें कि यह समाधान खाली लाइनों की उपेक्षा करता है, हालांकि लाइन की गिनती के लिए नहीं।


मुश्किल और शांत! (+1)

2
यदि कोई या लाइनें खाली हैं, तो असाइनमेंट शून्य (एक मिथ्या मूल्य) का मूल्यांकन करता है, और लंबाई मुद्रित नहीं की जाएगी।
इलकाचू

@ilkachachu: स्थिति के आधार पर, खाली लाइनों को अनदेखा करना उचित होगा। मैंने इस बारे में एक नोट जोड़ा है।
थोर

14

एक सीधा Awk संस्करण (@ थोर के रूप में इतना कुशल नहीं), लेकिन थोड़ा और अधिक स्पष्ट:

awk 'NR <= 3 {print length}' /etc/passwd

3
यदि यह होता awk '{ print length } NR>=3 { exit }' /etc/passwd, तो मैं इसे बढ़ा देता।
अगली सूचना तक रोक दिया गया।

3
@ डेनिसविलियम्सन, धन्यवाद। यह एक बहुत अच्छा सुझाव है, मैं इसे अपने उत्तर में शामिल नहीं करूंगा क्योंकि यह पहले से ही थोर के प्रस्ताव में निहित है।

5

आप इसे awkकेवल कमांड के साथ निष्पादित कर सकते हैं , जैसा कि @Thor द्वारा वर्णित है, और @JJoao (मेरे से +1)

आप को जोड़ सकते हैं awkऔर headपैरामीटर के साथ -nनीचे वर्णित के रूप में लाइनों की संख्या से इस प्रकार है:

इस आदेश पर अमल करने के लिए @ मेरेलिन सुझाव के लिए धन्यवाद: head | awk

उदाहरण के लिए आपको पहली 3 लाइनों का उपयोग करना होगा:

head -n3 /etc/passwd | awk '{ print length($0); }' 

प्रधान आदमी

-n, --lines=[-]K
    print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file 

@ msjavx86 - महान :) कृपया जवाब स्वीकार करें, जब आप इसे करने में सक्षम होंगे
यार्न

बेशक मैं - लगभग 10 मिनट में;) फिर से धन्यवाद!
बाम्बोज़े_बाबुनी

8
शायद रिवर्स भी, head -n3 /etc/passwd | awkइसलिए awk को पूरी फाइल को प्रोसेस नहीं करना पड़ता है।
मैरिलिन

1
AWK लाइनों की गिनती कर सकता है, इसकी कोई आवश्यकता नहीं है head
अगली सूचना तक रोक दिया गया।

@DennisWilliamson - टिप्पणी के लिए धन्यवाद, प्रयोग headकरने वाला पहला काम था जो मेरे दिमाग में आया था। मैंने @Thor, @JJoao उत्तर दिया है जो awkकेवल समाधान का उपयोग करता है।
यारोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.