Mam szeregowe grepki, awksy i seds, które tworzą listę liczb, po jednej w każdej linii. Coś takiego:
1.13
3.59
1.23
Jak mogę potokować to do czegoś, co wyświetli średnią, maksimum i min?
Mam szeregowe grepki, awksy i seds, które tworzą listę liczb, po jednej w każdej linii. Coś takiego:
1.13
3.59
1.23
Jak mogę potokować to do czegoś, co wyświetli średnią, maksimum i min?
Odpowiedzi:
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
wzór /usr/local/bin/stats
, a następnie użyłem go jako blabla | stats
.
Uważam ten program za użyteczny do generowania statystyk na listach liczb w wierszu poleceń: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
Istnieje również simple-r, który może zrobić prawie wszystko, co R, ale z mniejszą liczbą naciśnięć klawiszy:
https://code.google.com/p/simple-r/
Aby obliczyć średnią, maksimum i min, należałoby wpisać jeden z:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
Z czapką do @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]
jest wartością w pierwszym (0-tym) polu każdej linii
Jeśli dane wejściowe są rozdzielone przecinkami, dodaj -F,
modyfikator wcześniej-lane