如何将可以从 0 到 10 位可变的数字转换为金额格式 Unix KSH

How to convert a number that could ve variable from 0 to 10 digits into an amount format Unix KSH

我正在尝试将一个可以从 0 到 10 位可变的数字转换为金额格式,我已经有一个解决方案(同时循环所有数字)但有人告诉我使用起来更容易printf 命令,格式示例为:

AMOUNT_WITHOUT_FORMAT        AMOUNT_WITH_FORMAT
6627492                      66,274.92
772220124                    7,722,201.24
120198                       1,201.98

如何格式化这些值?

正如我所说,我已经有了一个解决方案,但我想用更少的代码行来改进它。

谢谢大家

在bash / ksh shell 下,echo 语句不能用于格式化数字。需要使用printf命令按照FORMAT格式格式化打印数据。

语法

语法是:

printf "%'.2f" var

printf "%'.2d" var

printf "Total Rs.%'.2f" var

printf "Total $.%'.2f" var

' 作为十进制转换的字段和打印修饰符,千位分组分隔符根据当前 LC_NUMERIC 应用于输出的整数部分。 运行 用于检查 LC_NUMERIC:

当前设置的语言环境程序

例子

键入以下命令:

x="240570.578" 
printf "%'.2f\n" $x 
printf "Total $%'.2f\n" $x 
printf "Total INR.%'.2f\n" $x 

示例输出:

2,40,570.58 
Total ,40,570.58 
Total INR.2,40,570.58

推荐读物

man printf
man 3 printf
man local

来自 sed one liners

代码:

#在数字字符串中添加逗号,将“1234567”更改为“1,234,567”

gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta'                     

GNU sed

sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/,/;ta'  # other seds

# 在带小数点和减号的数字中添加逗号 (GNU sed)

gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/,/g;ta'

这是您实际需要的有效代码。

sed -e 's/..$/.&/g' | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/,/;ta'

解释:

  1. 第一个 sed 进程匹配最后两位数字并替换匹配字符串前面的点 (.)。
  2. 第二个sed是一个循环匹配三个三位数加逗号的过程

输出:

23235235202   
2325245
232,352,352.02
23,252.45

参考下面的link..

http://www.unix.com/shell-programming-and-scripting/38397-insert-decimal-point.html

vi @Harini 提供的这个解决方案非常有效!

AMOUNT=123456789
echo ${AMOUNT} | sed -e 's/..$/.&/g' | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/,/;ta'

Result:
1,234,567.89