Dengan menggunakan bash, bagaimana saya bisa mengetahui rata-rata, maks dan min dari daftar angka?


18

Saya memiliki serangkaian pip, grep, sedks, dan sed yang menghasilkan daftar angka, satu di setiap baris. Sesuatu seperti ini:

1.13
3.59 
1.23

Bagaimana saya bisa mem-pipe ini ke sesuatu yang akan menghasilkan rata-rata, maks, dan min?


Jika Anda mem-pipkan grep, awk dan sed bersama-sama, hal yang sama sering dapat dilakukan dalam satu doa awk.
Dijeda sampai pemberitahuan lebih lanjut.

Jawaban:


27

Karena Anda sudah menggunakan 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}'

Bagus, itu bekerja untuk saya!
JavaRocky

Saya pikir sudah ada biner yang menerima daftar angka dan hitungan, rata-rata, minimum, maksimum untuk Anda, seperti menggunakan 'waktu'.
JavaRocky

1
Saya hanya akan meletakkan awkpola di atas /usr/local/bin/statsatau di dalam , dan kemudian menggunakannya sebagai blabla | stats.
Acumenus


0

Ada juga simple-r, yang dapat melakukan hampir semua hal yang dapat dilakukan R, tetapi dengan sedikit penekanan tombol:

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

Untuk menghitung rata-rata, maks, dan min, seseorang harus mengetikkan salah satu dari:

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

0

Dengan ujung topi ke @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] adalah nilai dalam bidang pertama (0'th) dari setiap baris

Jika data input Anda dipisahkan koma, tambahkan -F,pengubah sebelumnya-lane

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.