如何将可以从 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'
解释:
- 第一个 sed 进程匹配最后两位数字并替换匹配字符串前面的点 (.)。
- 第二个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
我正在尝试将一个可以从 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'
解释:
- 第一个 sed 进程匹配最后两位数字并替换匹配字符串前面的点 (.)。
- 第二个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