这是一个输出示例我在某些程序中输入:
$ 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
这是:如果后面有一个或两个十进制字符,请使用逗号,
代替.
。
这假设,当某个程序使用.
点数千分隔符时,它不会被更改,如:
$ 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'
答案 0 :(得分:1)
您可以使用此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'
答案 1 :(得分:1)
试试这个
$ echo "Speed.GPU.#*...: 254.4 kH/s" |sed 's/\.\([0-9]\{1,2\}\)\b/,\1/g'
Speed.GPU.#*...: 254,4 kH/s
$ echo "Speed.GPU.#*...: 254.44 kH/s" |sed 's/\.\([0-9]\{1,2\}\)\b/,\1/g'
Speed.GPU.#*...: 254,44 kH/s
$ echo "Speed.GPU.#*...: 254.444 kH/s" |sed 's/\.\([0-9]\{1,2\}\)\b/,\1/g'
Speed.GPU.#*...: 254.444 kH/s
答案 2 :(得分:1)
你问的是不可能的。穷人的节目如何知道像33.112
这样的数字是“三万三千一百二十二”的欧洲符号还是“三十三点一二”的英语符号?
答案 3 :(得分:0)
尝试类似:
sed 's/\([0-9]\)\.\([0-9]{1,2}\)/\1,\2/g' myfile.txt