Bash kullanarak, bir sayı listesinden ortalama, maks ve min değerlerini nasıl bulabilirim?


18

Her satırda bir sayı listesi üreten bir dizi borulu greps, awks ve seds var. Bunun gibi bir şey:

1.13
3.59 
1.23

Bunu ortalama, maks ve min çıktı verecek bir şeye nasıl bağlayabilirim?


Eğer grep, awk ve sed'i birbirine bağlıyorsanız, aynı şey genellikle bir awk çağrısında da yapılabilir.
sonraki duyuruya kadar duraklatıldı.

Yanıtlar:


27

Zaten awk kullandığınız için

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}'

Güzel, benim için çalışıyor!
JavaRocky

Zaten bir sayı listesi ve sayı, avg, min, max, 'zaman' kullanmak gibi bir tür kabul eden bir ikili olacağını düşündüm.
JavaRocky

1
Yukarıdaki awkpaterni /usr/local/bin/statsya da böyle koydum ve sonra olarak kullanırım blabla | stats.
Acumenus


0

Ayrıca R'nin yapabileceği hemen hemen her şeyi yapabilen basit-r vardır, ancak daha az tuş vuruşuyla:

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

Ortalama, maks ve min'i hesaplamak için aşağıdakilerden birini yazmanız gerekir:

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

0

@DerfK'ye bir şapka ucu ile:

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] her satırın ilk (0'cı) alanındaki değerdir

Giriş verileriniz virgülle ayrılmışsa, -F,önce değiştiriciyi ekleyin-lane

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.