Ho una serie di greps, awks e seded che producono un elenco di numeri, uno su ogni riga. Qualcosa come questo:
1.13
3.59
1.23
Come posso indirizzare questo a qualcosa che produrrà la media, il massimo e il minimo?
Ho una serie di greps, awks e seded che producono un elenco di numeri, uno su ogni riga. Qualcosa come questo:
1.13
3.59
1.23
Come posso indirizzare questo a qualcosa che produrrà la media, il massimo e il minimo?
Risposte:
Dal momento che stai già utilizzando 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
modello sopra /usr/local/bin/stats
o simile e quindi usarlo come blabla | stats
.
Trovo questo programma utile per generare statistiche su elenchi di numeri dalla riga di comando: http://web.cs.wpi.edu/~claypool/misc/stats/stats.html
C'è anche simple-r, che può fare quasi tutto ciò che R può fare, ma con meno tasti:
https://code.google.com/p/simple-r/
Per calcolare la media, il massimo e il minimo, si dovrebbe digitare uno di:
r summary file.txt
r summary - < file.txt
cat file.txt | r summary -
Con una punta del cappello a @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]
è il valore nel primo (0 °) campo di ogni riga
Se i tuoi dati di input sono separati da virgola, aggiungi -F,
prima il modificatore-lane