
Envoyé par
LsMarx
Mais j'ai un nouveau problème

En effet je souhaiterais transformer les secondes (720sec, 840.083sec, 120.083sec) en minute seconde, jusque la rien de bien compliqué mais j'ai du mal avec les entiers/float
J'ai ça qui fonctionne pour les entiers:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #!/bin/sh
prMin=60
ResuStart=`grep "black_start" out.txt`
ResuStart="${ResuStart##*black_start:}"
ResuStart="${ResuStart%black_end*}"
echo "$(($ResuStart / $prMin)) min $(($ResuStart % $prMin)) sec" > result.txt
ResuEnd=`grep "black_end" out.txt`
ResuEnd="${ResuEnd##*black_end:}"
ResuEnd="${ResuEnd%black_duration*}"
echo "$(($ResuEnd / $prMin)) min $(($ResuEnd % $prMin)) sec" >> result.txt
ResuDuration=`grep "black_duration" out.txt`
ResuDuration="${ResuDuration##*black_duration:}"
echo "$(($ResuDuration / $prMin)) min $(($ResuDuration % $prMin)) sec" >> result.txt |
Mais pour les float j'ai l'erreur:
./essai.sh: 13: arithmetic expression: expecting EOF: "840.083 / 60"
Je sais pas comment faire pour éviter ça?!
Merci
un grand classique (voir FAQ)!
L'expression $((ResuDuration / prMin)) (où les '$' sont optionnels devant les variables) ne sait traiter que les entiers!
Tu peux soit arrondir les flottants (supprimer ce qui suit le "."), soit utiliser un outil comme 'bc', par exemple:
echo "scale=2; $ResuDuration / $prMin" | bc -l
ou bien ici:
echo $(echo "$ResuStart / $prMin" | bc) min $(echo "$ResuStart % $prMin" | bc) sec > result.txt
HTH
)jack(
Partager