किसी फ़ाइल के पहले कॉलम में होने वाली गणना


10

हमारे पास यह फ़ाइल है:

1 2 
1 3
1 2
3 3
52 1
52 300

और 1000 और।

मैं पहले कॉलम में हर बार होने वाली संख्या को गिनना चाहता हूं।

1  3 
3  1
52 2

इसका मतलब है कि हमने 1तीन बार देखा ।

मैं पर्ल, एडब्ल्यूके या बैश में कैसे कर सकता हूं?


3
हाय आर्शीवाद! मैंने देखा कि आपने हाल ही में बहुत समान प्रश्न पूछे हैं जो सभी एक ही विषय पर घूमते हैं। मुझे यकीन है कि समुदाय आपकी मदद करना चाहेगा, लेकिन शायद आप हमें दिखा सकते हैं कि आपने पहले से क्या कोशिश की है और वास्तव में आप कहां फंस गए हैं? हमें अपने प्रश्न पूछने से पहले लोगों को थोड़ा प्रयास करने की आवश्यकता है - किसी भी चीज को सीखने के लिए केवल दूसरों से आपको एक विशिष्ट चीज़ के लिए कोड देने से कोई सीखने में शामिल नहीं है। हमें यह क्यों नहीं बताया कि इसकी पृष्ठभूमि क्या है? हो सकता है कि आप जो चाहते हैं उसे पूरा करने का एक आसान तरीका है, और हमें कुछ अमूर्त संख्याओं के साथ डमी उदाहरणों का सहारा लेने की आवश्यकता नहीं है?
स्लुक

आपकी मदद के लिए tnx। मैं bgpdump डेटा के साथ काम कर रहा हूं और उन्हें पार्स कर रहा हूं।
अराश

जवाबों:


12

यदि इनपुट सॉर्ट किया गया है, तो आप यूनीक का उपयोग कर सकते हैं:

<infile cut -d' ' -f1 | uniq -c

यदि नहीं, तो इसे पहले क्रमबद्ध करें:

<infile cut -d' ' -f1 | sort -n | uniq -c

आउटपुट:

  3 1                                      
  1 3
  2 52

आउटपुट को आपकी आवश्यकता की तुलना में स्वैप किया जाता है, आप इसे awk '{ print $2, $1 }'बदलने के लिए उपयोग कर सकते हैं ।

1 3 
3 1
52 2

वहाँ भी अजीब मुहावरा है, जिसे हल किए गए इनपुट की आवश्यकता नहीं है:

awk '{h[$1]++}; END { for(k in h) print k, h[k] }'

आउटपुट:

1 3
52 2
3 1

जैसा कि यहां आउटपुट हैश से आता है, इसे ऑर्डर नहीं किया जाएगा, sort -nयदि आवश्यक हो तो पास करें :

awk '{h[$1]++} END { for(k in h) print k, h[k] }' | sort -n

यदि आप GNU awk का उपयोग कर रहे हैं, तो आप awk के भीतर से छँटाई कर सकते हैं:

awk '{h[$1]++} END { n = asorti(h, d, "@ind_num_asc"); for(i=1; i<=n; i++) print d[i], h[d[i]] }'

पिछले दो मामलों में आउटपुट है:

1 3
3 1
52 2

tnx .its ने काम किया :)
Arash

क्या आप कोड समझा सकते हैं ??? awk '{h [$ 1] ++} END {for (k in h) Print k, h [k]}' | सॉर्ट-एन
अराश

3
@arashams: {h[$1]++}ब्लॉक का मूल्यांकन प्रत्येक पंक्ति के लिए किया जाता है। hएक हैश है और $1पहला कॉलम है और इसमें कुंजी के रूप में उपयोग किया जाता है h। तो यह लंबा है कि कितनी बार अद्वितीय $1देखा जाता है। ENDब्लॉक इनपुट के अंत में मार डाला, और चाबी और हिसाब प्रिंट है। sort -nसंख्यात्मक रूप से आउटपुट को सॉर्ट करें।
थोर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.