मान लीजिए कि मेरे पास निम्नलिखित के समान एक फाइल है:
123
123
234
234
123
345
मुझे लगता है कि कितनी बार '123' को दोहराया गया था, कितनी बार '234' को दोहराया गया था, आदि। तो आदर्श रूप में, आउटपुट जैसा होगा:
123 3
234 2
345 1
मान लीजिए कि मेरे पास निम्नलिखित के समान एक फाइल है:
123
123
234
234
123
345
मुझे लगता है कि कितनी बार '123' को दोहराया गया था, कितनी बार '234' को दोहराया गया था, आदि। तो आदर्श रूप में, आउटपुट जैसा होगा:
123 3
234 2
345 1
जवाबों:
मान लें कि प्रति पंक्ति एक संख्या है:
sort <file> | uniq -c
आप --count
लिनक्स पर जीएनयू संस्करण के साथ अधिक वर्बोज़ फ़्लैग का भी उपयोग कर सकते हैं :
sort <file> | uniq --count
sort
फिर से उपयोग कर सकते हैं जैसे:sort <file> | uniq -c | sort -n
यह डुप्लिकेट लाइनों को केवल काउंट के साथ प्रिंट करेगा :
sort FILE | uniq -cd
या, GNU लंबे विकल्पों के साथ (लिनक्स पर):
sort FILE | uniq --count --repeated
पर बीएसडी और OSX आप ग्रेप उपयोग करने के लिए अद्वितीय लाइनों बाहर फिल्टर करने के लिए:
sort FILE | uniq -c | grep -v '^ *1 '
दिए गए उदाहरण के लिए, परिणाम होगा:
3 123
2 234
यदि आप सभी लाइनों के लिए गिनती प्रिंट करना चाहते हैं, जिनमें केवल एक बार दिखाई देते हैं:
sort FILE | uniq -c
या, GNU लंबे विकल्पों के साथ (लिनक्स पर):
sort FILE | uniq --count
दिए गए इनपुट के लिए, आउटपुट है:
3 123
2 234
1 345
शीर्ष पर सबसे लगातार लाइनों के साथ आउटपुट को सॉर्ट करने के लिए , आप निम्न (सभी परिणाम प्राप्त करने के लिए) कर सकते हैं:
sort FILE | uniq -c | sort -nr
या, केवल डुप्लिकेट लाइनें प्राप्त करने के लिए, सबसे पहले अक्सर:
sort FILE | uniq -cd | sort -nr
OSX और BSD पर अंतिम एक बन जाता है:
sort FILE | uniq -c | grep -v '^ *1 ' | sort -nr
| sort -n
या | sort -nr
पाइप में पुनरावृत्ति गणना (क्रमशः आरोही या अवरोही) द्वारा आउटपुट को सॉर्ट किया जाएगा। यह वह नहीं है जो आप पूछ रहे हैं, लेकिन मैंने सोचा कि यह मदद कर सकता है।
| awk '$1>100'
sort FILE | uniq -c | grep -v '^ *1 '
के जरिए awk:
awk '{dups[$1]++} END{for (num in dups) {print num,dups[num]}}' data
में awk 'dups[$1]++'
आदेश, चर $1
स्तम्भ 1 की सारी सामग्री को रखती है और वर्ग कोष्ठक सरणी का उपयोग कर सकते हैं। तो, data
फ़ाइल में लाइन के प्रत्येक 1 कॉलम के लिए , नाम के ऐरे का नोड dups
बढ़ा हुआ है।
और अंत में, हम चर के रूप में dups
सरणी के साथ लूपिंग कर रहे हैं num
और पहले सहेजे गए नंबरों को प्रिंट करते हैं, फिर उनके द्वारा डुप्लिकेट किए गए मान की संख्या dups[num]
।
ध्यान दें कि आपकी इनपुट फ़ाइल में कुछ लाइनों के अंत में रिक्त स्थान हैं, यदि आप उन को साफ करते हैं, तो आप ऊपर दिए गए कमांड के $0
स्थान पर उपयोग कर सकते हैं $1
:)
uniq
क्या है ?
sort | uniq
और awk सॉल्यूशन में काफी अलग परफॉर्मेंस और रिसोर्स ट्रेड-ऑफ्स होते हैं: अगर फाइल्स बड़ी हैं और अलग-अलग लाइनों की संख्या छोटी है, तो awk सॉल्यूशन बहुत अधिक कुशल है। यह लाइनों की संख्या में रैखिक है और अंतरिक्ष उपयोग विभिन्न लाइनों की संख्या में रैखिक है। OTOH, awk solution को सभी अलग-अलग लाइनों को मेमोरी में रखने की आवश्यकता होती है, जबकि (GNU) सॉर्ट अस्थायी फ़ाइलों का सहारा ले सकता है।
"Windows PowerShell" का उपयोग करते हुए विंडोज़ में मैंने इसे प्राप्त करने के लिए नीचे बताई गई कमांड का उपयोग किया
Get-Content .\file.txt | Group-Object | Select Name, Count
परिणाम को फ़िल्टर करने के लिए हम ऑब्जेक्ट-ऑब्जेक्ट Cmdlet का भी उपयोग कर सकते हैं
Get-Content .\file.txt | Group-Object | Where-Object { $_.Count -gt 1 } | Select Name, Count
मान लें कि आपको एक मानक यूनिक्स शेल और / या साइबरविन पर्यावरण तक पहुंच मिली है:
tr -s ' ' '\n' < yourfile | sort | uniq -d -c
^--space char
मूल रूप से: सभी अंतरिक्ष वर्णों को लाइनब्रेक में परिवर्तित करें, फिर ट्रांस्लेट किए गए आउटपुट को सॉर्ट करें और इसे अनइक और डुप्लिकेट लाइनों को गिनने के लिए फ़ीड करें।