2010-09-27 12 views
6

मैंने फ़ाइल के एक निश्चित कॉलम में आइटम्स की आवृत्ति प्राप्त करने के लिए एक छोटी बैश स्क्रिप्ट बनाई थी।बैश: आवृत्ति तालिका से प्रतिशत प्राप्त करना

उत्पादन इस

A  30 
B  25 
C  20 
D  15 
E  10 

आदेश मैं स्क्रिप्ट के अंदर इस्तेमाल कैसे मैं प्रत्येक मामले के लिए रिश्तेदार प्रतिशत दिखाने के लिए और साथ ही इसे संशोधित कर सकते हैं इस

cut -f $1 $2| sort | uniq -c | 
sort -r -k1,1 -n | awk '{printf "%-20s %-15d\n", $2,$1}' 

की तरह है की तरह sth होगा । तो यह की तरह

A  30  30% 
B  25  25% 
C  20  20% 
D  15  15% 
E  10  10% 
+1

मुझे लगता है कि उदाहरण होगा स्पष्ट हो, अगर संख्याएं खुद को जोड़ नहीं लेती हैं, तो 100 तक। –

उत्तर

2

प्रयास करें इस (तरह से समाप्त करने के लिए ले जाया गया:

cut -f $1 $2| sort | uniq -c | awk '{array[$2]=$1; sum+=$1} END { for (i in array) printf "%-20s %-15d %6.2f%%\n", i, array[i], array[i]/sum*100}' | sort -r -k2,2 -n 
2

कुछ इस तरह करने के लिए अपने awk आदेश बदले होगा:

awk '{ a[++n,1] = $2; a[n,2] = $1; t += $1 } 
    END { 
     for (i = 1; i <= n; i++) 
      printf "%-20s %-15d%d%%\n", a[i,1], a[i,2], 100 * a[i,2]/t 
    }' 
संबंधित मुद्दे