0

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

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

我怎样才能像这样格式化这些值?

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

谢谢你们

4

4 回答 4

2

这是您实际需求的代码。

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

解释:

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

输出:

23235235202   
2325245
232,352,352.02
23,252.45

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

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

于 2017-06-12T11:40:04.047 回答
1

从 sed 一班轮

代码:

#在数字字符串中添加逗号,将“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})/\1\2,\3/g;ta'
于 2017-06-10T04:34:16.330 回答
0

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 "%'.2f\n" $x 
printf "Total $%'.2f\n" $x 
printf "Total INR.%'.2f\n" $x 

示例输出:

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

推荐读数

man printf
man 3 printf
man local
于 2017-06-10T04:28:36.883 回答
0

这个解决方案提供了 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
于 2017-06-12T16:07:37.990 回答