Linux将整数转换为金额字段

时间:2017-04-29 20:28:11

标签: linux bash

我有一个简单的请求,但无法在网上找到任何关于它的内容。

这适用于Linux bash脚本:

VAR1 = 123456

我想输出看起来像:

1,234.56作为金额字段(总是2位小数)

我尝试了不同的版本printf,但没有运气。

感谢。

2 个答案:

答案 0 :(得分:0)

看起来非常像将数字转换为货币格式。请考虑以下printf方法:

LC_ALL=en_US.UTF-8 printf "%'.2f\n" ${var1%??}"."${var1:(-2)}

输出:

1,234.56
'格式内的

"%'.2f\n"符号提供十进制转换

我应该注意,以上内容取决于您当前的LC=ALL / LC_NUMERIC语言环境变量(隐含小数点,千位组分隔符)

答案 1 :(得分:0)

另一个正则表达式解决方案似乎工作到999,999.99,始终保持2位小数:

$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"1"
1
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"12"
12
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"123"
1.23
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"1234"
12.34
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"12345"
123.45
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"123456"
1,234.56
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"1234567"
12,345.67
$ perl -pe 's/(.*?)(.{1,3})(.{2}$)/\1,\2.\3/;s/^,//' <<<"12345678"
123,456.78