J’essaie de convertir un nombre qui pourrait être variable de 0 à 10 chiffres dans un format de montant, j’ai déjà une solution pour cela (tout en boucle tous les chiffres) mais quelqu’un m’a dit que c’est beaucoup plus facile avec la commande printf, un exemple du format est:
AMOUNT_WITHOUT_FORMAT AMOUNT_WITH_FORMAT 6627492 66,274.92 772220124 7,722,201.24 120198 1,201.98
Comment puis-je formater ces valeurs comme ça?
Comme je l’ai dit, j’ai déjà une solution mais je veux l’améliorer avec moins de lignes de code.
Merci à tous
C’est le code de votre besoin réel qui fonctionne.
sed -e 's/..$/.&/g' | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'
EXPLICATION:
Sortie:
23235235202 2325245 232,352,352.02 23,252.45
Je l’ai eu en me référant au lien ci-dessous.
http://www.unix.com/shell-programming-and-scripting/38397-insert-decimal-point.html
De sed un liners
Code:
#add les virgules aux chaînes numériques, en changeant “1234567” en “1 234 567”
gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' # other seds
# append des virgules aux nombres avec des points décimaux et des signes moins (GNU sed)
gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'
L’instruction echo ne peut pas être utilisée pour formater des nombres sous le shell bash / ksh. Vous devez utiliser la commande printf pour formater et imprimer les données en fonction de FORMAT.
Syntaxe
La syntaxe est la suivante:
printf "%'.2f" var
OU
printf "%'.2d" var
OU
printf "Total Rs.%'.2f" var
OU
printf "Total $.%'.2f" var
Le ‘agir comme un champ et modificateurs d’impression pour les conversions décimales, le séparateur de regroupement des milliers est appliqué à la partie entière de la sortie selon le LC_NUMERIC actuel. Exécutez le programme de parameters régionaux pour vérifier les parameters actuels de LC_NUMERIC:
Exemples
Tapez les commandes suivantes:
x="240570.578" printf "%'.2f\n" $x printf "Total $%'.2f\n" $x printf "Total INR.%'.2f\n" $x
Échantillons de sortie:
2,40,570.58 Total $2,40,570.58 Total INR.2,40,570.58
Lectures recommandées
man printf man 3 printf man local
Cette solution fournie vi @Harini fonctionne comme un charme!
AMOUNT=123456789 echo ${AMOUNT} | sed -e 's/..$/.&/g' | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' Result: 1,234,567.89