बैश का उपयोग करके, मैं संख्याओं की सूची से औसत, अधिकतम और न्यूनतम कैसे पता लगा सकता हूं?


18

मेरे पास एक श्रृंखला पाइप्ड ग्रीप्स, ओक्स और सेड्स हैं जो संख्याओं की एक सूची का उत्पादन करते हैं, प्रत्येक पंक्ति पर एक। कुछ इस तरह:

1.13
3.59 
1.23

मैं इसे किस तरह से पाइप कर सकता हूं जो औसत, अधिकतम और न्यूनतम उत्पादन करेगा?


यदि आप grep, awk और sed को एक साथ जोड़ रहे हैं, तो एक ही चीज़ अक्सर awk के एक आह्वान में की जा सकती है।
अगली सूचना तक रोक दिया गया।

जवाबों:


27

चूंकि आप पहले से ही awk का उपयोग कर रहे हैं

blahblahblah | awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}; total+=$1; count+=1} END {print total/count, max, min}'

अच्छा लगा, यह मेरे लिए काम करता है!
JavaRocky

मुझे लगा कि पहले से ही एक बाइनरी है जो संख्याओं की एक सूची को स्वीकार करता है और गिनती, एवीजी, मिनट, आपके लिए अधिकतम, 'समय' का उपयोग करने की तरह।
JavaRocky

1
मैं उपरोक्त awkपैटर्न को /usr/local/bin/statsया ऐसे ही डालूंगा , और फिर इसका उपयोग करूंगा blabla | stats
एक्यूमेनस


0

सरल-आर भी है, जो लगभग वह सब कुछ कर सकता है जो आर कर सकता है, लेकिन कम कीस्ट्रोक्स के साथ:

https://code.google.com/p/simple-r/

औसत, अधिकतम और न्यूनतम गणना करने के लिए, किसी एक को टाइप करना होगा:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -

0

@DerfK को टोपी की नोक के साथ:

perl -lane '$n=$F[0]; if(not defined $min){$min=$max=$n}; if($n>$max){$max=$n}; if($n<$min){$min=$n}; $total+=$n; $count+=1; END{print $total/$count." $max $min"}'

$F[0] प्रत्येक पंक्ति के पहले (0'th) फ़ील्ड में मान है

यदि आपका इनपुट डेटा अल्पविराम से अलग है, तो -F,संशोधक को पहले जोड़ें-lane

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.