Comment convertir un nombre qui pourrait être variable de 0 à 10 chiffres dans un format de montant Unix KSH

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:

  1. Le premier processus sed correspond aux deux derniers chiffres et remplace le point (.) Au début de la chaîne correspondante.
  2. Second Sed est un processus de boucle pour faire correspondre les trois trois chiffres pour y append des virgules.

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' 

GNU sed

 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