कमांड uniq -c ने शुरुआत में व्हाट्सएप क्यों रखा?


11

मेरे पास शेल स्क्रिप्ट में यह कोड है:

sort input | uniq -c | sort -nr > output

इनपुट फ़ाइल में कोई पूर्ववर्ती सफेद स्थान नहीं था, लेकिन आउटपुट करता है। मैं यह कैसे तय करुं? यह बाश में है

जवाबों:


13

यूनीक का डिफ़ॉल्ट व्यवहार एक पंक्ति 7 रिक्त स्थान में आवृत्ति को सही-सही ठहराना है, फिर एकल स्थान के साथ आइटम से आवृत्ति को अलग करना।

स्रोत: https://www.tilianuxrain.com/articles/tweaking-uniq-c

Sed के साथ प्रमुख रिक्त स्थान निकालें:

$ sort input | uniq -c | sort -nr | sed 's/^\s*//' > output

2
7 रिक्त स्थान, उर्फ ​​"एक टैब से कम"।
क्राइसिस -ऑन स्ट्राइक-

आप तब टैब के साथ कुछ अलग कर सकते हैं जैसे perl -pe 's/ *(\d+) /$1\t/'( यहां कुछ विकल्प )। क्लिपबोर्ड पर xclip -selection cसीधे स्प्रेडशीट पर चिपकाने के लिए पाइप भी ।
पाब्लो बियांची

5

uniq -cप्रमुख व्हाट्सएप जोड़ता है। उदाहरण के लिए

$ echo test
test
$ echo test | uniq -c
      1 test

आप इसे निकालने के लिए पाइपलाइन के अंत में एक कमांड जोड़ सकते हैं। उदाहरण के लिए

$ echo test | uniq -c | sed 's/^\s*//'
1 test

1

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

0
uniq -c -i | tr -s ' ' | cut -c 2-

Tr -s के साथ एकल व्हाट्सएप में प्रमुख व्हाट्सएप का अनुवाद करें और फिर कट -c के साथ 2 डी वर्ण से आउटपुट प्रिंट करें।


आपका समाधान व्हॉट्सएप अनुक्रम के सभी घटनाओं को निचोड़ देगा। यह वांछित प्रभाव है।
मार्क वॉनहोमिसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.