लिनक्स में फ़ाइल से सबसे आम दिखने वाली लाइनें प्राप्त करें


11

मेरे पास एक पाठ फ़ाइल है जिसमें प्रति पंक्ति विभिन्न शब्द हैं।
मैं फ़ाइल में 12 सबसे लगातार दिखने वाली लाइनें कैसे ढूंढ सकता हूं और उन्हें प्रदर्शित कर सकता हूं?
मैं स्क्रिप्टिंग कमांड के साथ बहुत अच्छा नहीं हूं।

अगर मुझे कमांड और एक स्पष्टीकरण मिल सकता है, ताकि मैं समझ सकूं कि इसका उपयोग कैसे करना है और आज्ञाओं पर अपने ज्ञान का विस्तार करना यह बहुत अच्छा होगा!


जवाबों:


21

इसे आप बिल्ट-इन कमांड्स के साथ आसानी से कर सकते हैं।

  • फ़ाइल की सामग्री फ़ीड sort। हमें अगले चरण के लिए इसकी आवश्यकता है।
  • यह जाता है uniq -c। यह प्रत्येक पंक्ति की अद्वितीय घटना की गणना करेगा। यदि इसी तरह की रेखाएं आसन्न नहीं हैं, तो यह पहले छंटाई किए बिना काम नहीं करेगा।
  • फिर, इसे दूसरे को खिलाएं sort, जो अब उलट क्रम में ( r) और आउटपुट के संख्यात्मक ( n) व्याख्या पर आधारित है uniq। हमें संख्यात्मक विकल्प की आवश्यकता है अन्यथा, संख्याओं के सामने का स्थान गलत परिणाम देगा ( अधिक के लिए जीएनयू sortकी सहायता देखें )।
  • अंत में, केवल पहली बारह पंक्तियों के साथ दिखाएं head

कमांड तब होगी:

sort test.txt | uniq -c | sort -rn | head -n 12

यहां आउटपुट में वास्तविक घटनाओं की गणना होती है।

केवल लाइनों की कच्ची सूची प्राप्त करने के लिए, आप आउटपुट को sedनिम्न पर पाइप कर सकते हैं :

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

उदाहरण:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

पहले कमांड से आउटपुट, लेकिन केवल 2 का चयन head:

6 Hello there!
3 Look at me!

दूसरी कमांड से आउटपुट:

Hello there!
Look at me!

1
उपयोग करने से पहले आपको इसे क्रमबद्ध करना होगा uniq
cYrus

@ श्लोक: धन्यवाद! एक प्रश्न: प्रत्येक sort -rnक्रम द्वारा बनाई गई प्रत्येक पंक्ति के आगे की संख्या को छांटने के रूप में उपयोग करने वाले रिवर्स ऑर्डर में क्रमबद्ध uniq -c? मैंने सोचा कि ऐसा कुछ k1या जैसा कुछ उपयोग किया जाएगा
जिम

@ जीम बिल्कुल। द्वारा उत्पादित संख्या पर rउलटा, और nसंख्यात्मक रूप से क्रमबद्ध होता है uniq। आपका वास्तव में क्या मतलब है k1?
21

@ एसएलएचएचके: मैं इन कमांडों का उपयोग करके यह पता लगाने की कोशिश कर रहा था manकि मैं समझ गया हूं कि किसी -kचीज़ का उपयोग करने वाले वाक्यविन्यास का उपयोग फ़ील्ड को चुनने के लिए किया जाना चाहिए
जिम

@ क्रेयर्स: एज केस क्या है जिसमें पहले से एक छंटाई की जरूरत होती है?
जिम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.