Comment afficher le nombre à deux décimales dans la fonction bash

Comment dois-je prendre un nombre de centièmes de secondes et l’afficher en secondes à deux décimales? Code Psuedo pour suivre la fonction dTime Je ne suis pas sûr mais vous aurez ce que je veux, je pense.

function time { echo "$(date +%N)/10000000" } function dTime { echo "($1/100).(${$1:${#1}-3:${#1}-1})" } T=$time sleep 2 T=$dTime T 

Bash a une fonction printf intégrée:

 printf "%0.2f\n" $T 

Ce qui suit divise la sortie de date +%N par 1000000000 , arrondit le résultat à deux décimales et affecte le résultat à la variable T

 printf -v T "%.2f" $(bc -l <<< "$(date +%N)/1000000000") 

Si vous voulez juste imprimer les trucs,

 bc <<< "scale=2; $(date +%N)/1000000000" 

Si vous n'aimez pas bc et que vous voulez utiliser dc (qui est un peu plus léger et beaucoup plus drôle à utiliser que le reverse polish),

 dc <<< "2 k $(date +%N) 1000000000 / p" 

Notez la différence, avec printf vous aurez le 0 , pas avec bc et dc . Il existe une autre différence entre printf et bc (ou dc ): printf arrondit au nombre le plus proche à deux décimales, tandis que bc (ou dc ) arrondit à deux décimales. Si vous voulez ce dernier comportement et atsortingbuez à une variable T le résultat, vous pouvez utiliser, par exemple,

 T=$(dc <<< "2 k $(date +%N) 1000000000 / p") 

ou, si vous voulez aussi le premier 0 :

 T=0.$(dc <<< "2 k $(date +%N) 1000000000 / p") 

Ci-dessous peut être fait pour 2 précision décimale,

 echo $T | bc -l | xargs printf "%.2f"