गणना करें कि किसी फ़ाइल में प्रत्येक पंक्ति कितनी बार दिखाई देती है


23

कहो कि मेरे पास एक फ़ाइल है जिसमें शामिल हैं:

A
A
A
B
CC

मैं इस तरह से उत्पादन करना चाहता हूं:

A 3
B 1
CC 1

जवाबों:


23

मैं यह समझ गया; में से एक uniqके विकल्प है -c"घटनाओं की संख्या से उपसर्ग लाइनों" के लिए,:

$ uniq -c

1
ध्यान दें कि संख्याओं को पहले रखता है। यदि आप आदेश के बारे में उधम मचाते थे, तो आप कर सकते थे:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous

12
यह भी ध्यान दें कि यह केवल आसन्न रिपीट लाइनों को गिनता है। एक सामान्य मुहावरा हैsort | uniq
स्टीवन डी

4
uniq भी डेटम के सामने गिनती रखता है। मूल प्रश्न वास्तव में कुछ इस तरह की आवश्यकता होगी: सॉर्ट फ़ाइलनाम | uniq -c | awk '{प्रिंट $ 2, $ 1}'
ब्रूस एडिगर

यदि यह उपरोक्त टिप्पणियों से स्पष्ट नहीं है, तो आपको यह सुनिश्चित करना होगा कि आपके लक्ष्य को प्राप्त करने के लिए डेटा पहले सॉर्ट किया गया हो। यदि यह सॉर्ट नहीं किया गया है, तो आपके पास दोहराने वाली प्रविष्टियाँ होंगी। उदाहरण के लिए, यदि आपकी मूल फ़ाइल इसके बजाय थी A \ A \ A \ B \ A \ CC, तो बस का आउटपुट uniq -cदिखाएगा A 3और बाद में दिखाएगा A 1। पहले छंटनी, गारंटी देगी कि सभी समान रेखाओं को एक साथ समूहीकृत किया जाता है
१ang

16

मैं बस इसी तरह की समस्या के साथ यहां आया था। इस से, मैं एक और अधिक उन्नत कमांड को एक साथ रखने में कामयाब रहा, जो मुझे आशा है कि दूसरों के लिए उपयोगी है।

जैसा कि स्टीवन डी ने कहा था कि ऊपर की टिप्पणियों में uniqकेवल निकटवर्ती दोहराने वाली रेखाएं होती हैं, इसलिए आपको पहले लाइनों को क्रमबद्ध करना होगा। उसके बाद हम अद्वितीय रेखाएँ खोजते हैं फिर क्रमबद्ध करते हैं ताकि सबसे अधिक होने वाली रेखाएँ शीर्ष पर हों।

sort file.txt | uniq -c | sort -nr > output.txt

आउटपुट को फ़ाइल में रीडायरेक्ट किया जाता है output.txt। यदि आप केवल कमांड लाइन पर परिणाम देखना चाहते हैं, तो पुनर्निर्देशन को हटा दें और अंतिम कमांड को बदल दें sort -nताकि सबसे आम लाइन नीचे हो, यानी निश्चित रूप से स्क्रीन पर।


4
आप cat file.txt | sortबस के साथ बदल सकते हैं sort file.txt। :)
21

1
@mattdm: उस सूत्रीकरण का नकारात्मक पक्ष यह है कि आप जल्दी से catकुछ और दिलचस्प चीजों से प्रतिस्थापित नहीं कर सकते । चूंकि, आप जानते हैं, कोई भी नहीं है cat
सैमब

1
@SBB तब इसे लिखें < file.txt sort | uniq -c। यह संपादित करना आसान है, और फिर भी अनावश्यक से बचा जाता है cat
hvd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.