मेरे पास शेल स्क्रिप्ट में यह कोड है:
sort input | uniq -c | sort -nr > output
इनपुट फ़ाइल में कोई पूर्ववर्ती सफेद स्थान नहीं था, लेकिन आउटपुट करता है। मैं यह कैसे तय करुं? यह बाश में है
मेरे पास शेल स्क्रिप्ट में यह कोड है:
sort input | uniq -c | sort -nr > output
इनपुट फ़ाइल में कोई पूर्ववर्ती सफेद स्थान नहीं था, लेकिन आउटपुट करता है। मैं यह कैसे तय करुं? यह बाश में है
जवाबों:
यूनीक का डिफ़ॉल्ट व्यवहार एक पंक्ति 7 रिक्त स्थान में आवृत्ति को सही-सही ठहराना है, फिर एकल स्थान के साथ आइटम से आवृत्ति को अलग करना।
स्रोत: https://www.tilianuxrain.com/articles/tweaking-uniq-c
Sed के साथ प्रमुख रिक्त स्थान निकालें:
$ sort input | uniq -c | sort -nr | sed 's/^\s*//' > output
perl -pe 's/ *(\d+) /$1\t/'( यहां कुछ विकल्प )। क्लिपबोर्ड पर xclip -selection cसीधे स्प्रेडशीट पर चिपकाने के लिए पाइप भी ।
FWIW आप अधिक लचीलेपन के लिए एक अलग छँटाई उपकरण का उपयोग कर सकते हैं। अजगर ऐसा ही एक उपकरण है।
#!/usr/bin/python3
import sys, operator, collections
counter = collections.Counter(map(operator.methodcaller('rstrip', '\n'), sys.stdin))
for item, count in counter.most_common():
print(count, item)
सिद्धांत रूप में यह sortबड़े इनपुट के लिए टूल से भी तेज होगा क्योंकि उपरोक्त प्रोग्राम एक क्रमबद्ध सूची के बजाय डुप्लिकेट लाइनों की पहचान करने के लिए हैश टेबल का उपयोग करता है। (काश यह एक प्राकृतिक क्रम के बजाय मनमाने ढंग से समान गिनती की पंक्तियों को रखता है; इसमें संशोधन किया जा सकता है और अभी भी दो sortआह्वानों की तुलना में तेज़ हो सकता है ।)
यदि आप आउटपुट स्वरूप पर अधिक लचीलापन चाहते हैं, तो आप इन print()और format()बिल्ट-इन फ़ंक्शन देख सकते हैं।
उदाहरण के लिए, यदि आप 7 अग्रणी शून्य के साथ ऑक्टल में गिनती संख्या प्रिंट करना चाहते हैं और एनयूएल लाइन टर्मिनेटर के साथ एक अंतरिक्ष चरित्र के बजाय एक टैब के साथ अंतिम पंक्ति को बदलें:
print(format(count, '08o'), item, sep='\t', end='\0')
स्क्रिप्ट को किसी फ़ाइल में sort_count.pyसंग्रहीत करें , कहें , और उसे पायथन के साथ आमंत्रित करें:
python3 sort_count.py < input
uniq -c -i | tr -s ' ' | cut -c 2-
Tr -s के साथ एकल व्हाट्सएप में प्रमुख व्हाट्सएप का अनुवाद करें और फिर कट -c के साथ 2 डी वर्ण से आउटपुट प्रिंट करें।