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.