मेरे पास एक श्रृंखला पाइप्ड ग्रीप्स, ओक्स और सेड्स हैं जो संख्याओं की एक सूची का उत्पादन करते हैं, प्रत्येक पंक्ति पर एक। कुछ इस तरह:
1.13
3.59
1.23
मैं इसे किस तरह से पाइप कर सकता हूं जो औसत, अधिकतम और न्यूनतम उत्पादन करेगा?
मेरे पास एक श्रृंखला पाइप्ड ग्रीप्स, ओक्स और सेड्स हैं जो संख्याओं की एक सूची का उत्पादन करते हैं, प्रत्येक पंक्ति पर एक। कुछ इस तरह:
1.13
3.59
1.23
मैं इसे किस तरह से पाइप कर सकता हूं जो औसत, अधिकतम और न्यूनतम उत्पादन करेगा?
जवाबों:
चूंकि आप पहले से ही 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}'
awk
पैटर्न को /usr/local/bin/stats
या ऐसे ही डालूंगा , और फिर इसका उपयोग करूंगा blabla | stats
।
मुझे कमांड लाइन पर संख्याओं की सूचियों पर आँकड़े बनाने के लिए यह कार्यक्रम उपयोगी लगता है: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
सरल-आर भी है, जो लगभग वह सब कुछ कर सकता है जो आर कर सकता है, लेकिन कम कीस्ट्रोक्स के साथ:
https://code.google.com/p/simple-r/
औसत, अधिकतम और न्यूनतम गणना करने के लिए, किसी एक को टाइप करना होगा:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
@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