这是我在一些程序中得到的输出示例:
$ reportspeed
Speed.GPU.#*...: 254.4 kH/s
这是另一个例子:
$ reportspeed
Speed.GPU.#*...: 254.43 kH/s
只要在这两种情况下很明显 .
点后面的那一两个 数字 是小数部分,我想将该输出更改为:
$ reportspeed | decimalcomma
Speed.GPU.#*...: 254,4 kH/s
$ reportspeed | decimalcomma
Speed.GPU.#*...: 254,43 kH/s
这是:使用逗号,
代替。
如果后面有一个或两个小数字符。
这假设,当某些程序使用 .
dots for thousands 分隔符时,它不会被更改,如:
$ anotherprogram
Speed.Other.Thing....: 33.112 H/s
$ anotherprogram | decimalcomma
Speed.Other.Thing....: 33.112 H/s
我认为这可以通过使用 sed、awk、perl 甚至 shell 扩展来完成,但我在这方面不是很有经验。
有人可以帮我吗?
EDIT-1:即使这个问题要求解决“点后面的一个或两个数字”作为区分数千个逗号的方法,对于那些到达这里的人来说,对这种限制不感兴趣(只要标题可以表明它不存在),这是@almas shaikh(谢谢你,男孩)首先提出的方法:
sed 's/\([0-9]\)\.\([0-9]\)/\1,\2/g'
最佳答案
你可以使用这个 sed:
sed -r 's/\.([0-9]{1,2})\b/,\1/g'
测试:
cat file
Speed.GPU.#*...: 254.4 kH/s
Speed.GPU.#*...: 254.43 kH/s
Speed.Other.Thing....: 33.112 H/s
sed -r 's/\.([0-9]{1,2})\b/,\1/g' f
Speed.GPU.#*...: 254,4 kH/s
Speed.GPU.#*...: 254,43 kH/s
Speed.Other.Thing....: 33.112 H/s
PS:在 OSX 上使用:
sed -E 's/\.([0-9]{1,2})[[:>:]]/,\1/g'
关于Linux shell : Changing decimal (float) separator from dot to comma,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766627/