Pense-bête awk
Pour analyser rapidement et facilement des fichiers ou des sorties de commandes bash, awk s'avère en général particulièrement utile et pratique.
Calculer une moyenne et une médiane
On peut facilement calculer une moyenne (sur la dernière colonne d'un fichier par exemple) :
cat file | awk '{sum += $NF} END {printf "Average: %.3f\n", sum/NR}'
Qu'on peut améliorer pour cacluler également l'écart-type :
cat file | awk '{sum += $NF; sq += $NF^2} END {printf "Average: %.3f\nStddev: %.3f", sum/NR, sqrt(sq/NR - (sum/NR)^2}'
Il est également possible de calculer une médiane ; l'astuce est de trier la colonne que l'on souhaite analyser :
cat file | awk '{print $NF}' | sort | awk '{a[i++] = $NF} END {printf "Median: %.3f\n", a[int(NR/2)]}'
Trouver le minimum et le maximum
La principale astuce et de ne pas oublier d'initialiser les variables min et max :
cat file | awk 'NR == 1 {min = $NF; max = $NF} NR > 1 {min=min<$NF?min:$NF; max=max>$NF?max:$NF+0} END {printf "Min: %.3f\nMax: %.3f\n", min, max}'
Conversion d'unité de temps
Il est aisé de faire du calcul flottant en awk et les possibilités sont donc presque infinies. Un exemple concret, pour convertir des millisecondes en minutes (avec secondes) :
awk '{printf "%d, %d min %.3f s\n", $2, $(NF-1)/1000/60,($(NF-1)/1000-(int($(NF-1)/1000/60)*60))}'