ใช้ bash ฉันจะหาค่าเฉลี่ยสูงสุดและต่ำสุดจากรายการตัวเลขได้อย่างไร


18

ฉันมี greps piped อนุกรม awks และ seds ซึ่งสร้างรายการของตัวเลขหนึ่งในแต่ละบรรทัด บางสิ่งเช่นนี้

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

ฉันคิดว่าจะมีไบนารี่อยู่แล้วซึ่งยอมรับรายการตัวเลขและจำนวน, avg, min, max สำหรับคุณ, เหมือนกับการใช้ 'time'
JavaRocky

1
ฉันเพิ่งจะใส่ข้างต้นawkในรูปแบบหรือดังกล่าวแล้วใช้มันเป็น/usr/local/bin/stats blabla | stats
คิวเมนตัส


0

นอกจากนี้ยังมี simple-r ซึ่งสามารถทำเกือบทุกอย่างที่ R สามารถทำได้ แต่มีการกดแป้นน้อยกว่า:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.