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



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

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

如何这样设置这些值的格式?

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

谢谢大家

这是您的实际要求的代码,它有效。

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

解释:

  1. 第一个 sed 进程匹配最后两位数字,并在匹配字符串的前面替换 dot(.(。
  2. 第二个 Sed 是一个循环过程,以匹配三个三个数字以向其添加逗号。

输出:

23235235202   
2325245
232,352,352.02
23,252.45

我通过参考以下链接得到了这个..

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

from sed one liners

法典:

#add 逗号到数字字符串,将"1234567"更改为"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

# 用小数点和减号为数字添加逗号 (GNU sed(

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

echo 语句不能用于格式化 bash/ksh shell 下的数字。您需要使用 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 "%'.2fn" $x 
printf "Total $%'.2fn" $x 
printf "Total INR.%'.2fn" $x 

示例输出:

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

推荐阅读材料

man printf
man 3 printf
man local

这个解决方案提供了 vi @Harini就像一个魅力!

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

最新更新