मैं टेक्स्ट लाइनें कैसे गिनूं?


14

मैं कैसे गिनती करूं कि टेक्स्ट फाइल में कितनी लाइनें हैं। जैसे:

command file.txt

ध्यान दें, मैं केवल गैर-खाली लाइनों (सफेद स्थान और टैब की गिनती के बिना लाइनें) को गिनना चाहता हूं।



4
प्रश्न अच्छी तरह से परिभाषित नहीं है: क्या केवल व्हाट्सएप (रिक्त स्थान और TAB) के साथ एक रेखा को खाली माना जाता है?
रमनो

करीबी मतदाता : ओपी द्वारा उनकी टिप्पणी के अनुसार @ रमनो के स्पष्टीकरण के बाद संपादित प्रश्न । इसलिए कृपया
Unclear

2
@ कासिया यह अभी भी स्पष्ट नहीं है। मुझे समझ नहीं आ रहा है कि क्या ओपी केवल व्हाट्सएप (स्पेस, टैब \r) के साथ सा लाइन गिनना चाहता है या उन्हें छोड़ सकता है। वर्तमान सभी रिक्त स्थान के साथ गिनती लाइनों का जवाब देता है और केवल खाली छोड़ देता है।
टेराडो

@terdon OP DON'T रिक्त-पंक्तियों (रिक्त-पंक्तियों ( \rया \n) सहित , लाइनों-केवल-टैब और लाइनों-केवल-रिक्त स्थान सहित ) को गिनना चाहते हैं और जैसा कि मुझे लगता है और उनके अनुसार उत्तर दिया है, उन्हें छोड़ना चाहते हैं जो मैं समझा।
α atsнιη

जवाबों:


11

उपरोक्त उत्तर सही है लेकिन थोड़ा अलग है, आप grepइस तरह के आसान कोड के लिए उपयोग कर सकते हैंgrep -vc '^$' file.txt

उदाहरण के लिए (ए): file.txt

$grep -vc '^$' file.txt

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$2

उदाहरण के लिए (बी): file.txt

$sed '/^$/d' file.txt | wc -l

1    First line         #This is two tabs to comment.
2    
4
3    Fourth line        #Another two tabs to comment.

$4

सूचना परिणाम 4 है! जब हम केवल दो की उम्मीद करना चाहते हैं। लेकिन यह सामग्री के बीच के टैब को गिनता है और साथ ही टिप्पणी भी करता है।

0 से मायने रखता है और 1 से मायने रखता है grep से अलग करने के लिए sed जैसा कि मुझे याद है grep या sed के लिए और अधिक विवरण खोज।


1
आपके दोनों उदाहरण रिक्त रेखाओं को गिनेंगे, लेकिन ओपी ने खाली रेखाओं की गणना करने के लिए एक आदेश का अनुरोध किया
कोस

2
वास्तव में मैं गलत हूं, sedविकल्प वास्तव में सही है, लेकिन grepएक नहीं है
kos

केवल आंशिक रूप से सही होने के कारण मैंने उत्तर को अस्वीकार कर दिया, मुझे एक टिप्पणी छोड़ दो जब आपने इसे ठीक कर लिया है तो मैं अपने डाउनवोट को हटा सकता हूं
kos

1
@kos मुझे पूरा यकीन है, आप ध्यान दें कि प्रश्न किस तरह का अस्पष्ट है?
amrx

2
@kos, आप पहले स्थान पर सही थे, धन्यवाद। मैं 36 घंटे से अधिक नहीं सोया, मुझे लगता है कि बिस्तर के लिए समय है!
amrx

12

कोशिश करें sed:

sed '/^$/d' file.txt | wc -l

यदि आपके पास कोई स्थान है जिसमें केवल स्थान या टैब हैं और यदि आप उन्हें गणना से भी अनदेखा करना चाहते हैं:

sed '/^[[:blank:]]*$/d' file.txt | wc -l

3
मैं ^\s*$केवल टैब या रिक्त स्थान वाली खाता लाइनों का उपयोग करना चाहूंगा ।
सिल्वेन पिनेउ

@ सिल्वेनपीन्यू: जोड़ा गया ..
हेमायेल

1
मैं सहमत हूं कि यह ओपी के प्रश्न से स्पष्ट नहीं था, लेकिन रिक्त स्थान / टैब के साथ पाठ अपेक्षित परिणाम को बदल सकता है, +1।
सिल्वेन पिनेऊ

3

का उपयोग कर grep:

grep -vc '^$' file  # or
grep -vc '^\s*$' file    

3

आप उपयोग कर सकते हैं:

grep -cve '^\s*$' file.txt

यदि आपको इसके लिए एक कमांड की आवश्यकता है, तो बस निम्नलिखित पंक्तियों को अपने में पेस्ट करें .bashrcऔर अपने शेल सत्र को पुनः आरंभ करें या एक नया टर्मिनल खोलें:

count_lines()
{
    grep -cve '^\s*$' $1
}

उदाहरण:

count_lines file.txt
42

2

साथ :

awk 'NF{++count} END{print count}' file

स्पष्टीकरण:

NFक्षेत्रों की कुल संख्या है, और इसलिए इस प्रिंट इंगित करता है केवल गैर रिक्त लाइनों , के बाद से गैर-रिक्त लाइनों में NFसे अधिक है 0और सही का आकलन। अतः गैर-रिक्त रेखाओं को ढूंढने पर काउंट फ़्लैग को बढ़ाएँ और अंत में काउंट फ़्लैग के नवीनतम मूल्य को प्रिंट करें ।END{print count}


1

संपादित करें : आप केवल सब कुछ पाइप cकरने के grepबजाय विकल्प को जोड़ सकते हैं wc, अधिक कॉम्पैक्ट संस्करण के लिए @ muru का उत्तर देखें


के साथ grep:

grep -v '^$' file.txt | wc -l

0

पर्ल समाधान

पर्ल वह कर सकता है। सामान्य रूप से गिनती की रेखाएँ इस प्रकार काम करती हैं:

$ perl -ne 'END{print $.}' input.txt                                                                                     

यदि हम सभी खाली लाइनों को बाहर करना चाहते हैं, तो हम कुछ ऐसा करेंगे:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             

मान लीजिए कि हमारे पास इस तरह की इनपुट फ़ाइल है

$ cat -n input.txt
     1  Cat; Dog; Squirrel
     2  ORGANISM Animalus terrus
     3  
     4  Sequence: ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT
     5  

कुल 5 लाइनें हैं, 2 खाली लाइनें हैं। कमांड हमारे पास आउटपुट होगा:

$ perl -ne '$c+=1 if not /^$|^\s+$/;END{print $c}' input.txt                                                             
3

बहु फ़ाइल सुधार

यह सिंगल फाइल के लिए अच्छा काम करता है। अगर हम इसे कई फाइलों पर काम करना चाहते हैं, तो हम कुछ इस तरह कर सकते हैं:

$ perl -ne '$c+=1 if not /^$|^\s+$/;printf("%d %s\n",$c,$ARGV) and $c=0 if eof' input.txt /etc/passwd                    
3 input.txt
52 /etc/passwd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.