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