2015-01-04 108 views
0

这是一个输出例子我在一些程序得到:Linux的shell:从点更改小数点(浮点)分离,以逗号

$ 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或甚至完成壳扩张,但我不是很有经验。

请问有人能给我一些帮助吗?编辑1:即使这个问题要求解决“点后面的一个或两个数字”作为区分数千个逗号的方法,对于那些到这里感兴趣的人来说,没有这样的限制(并且只要标题可能表明,它不存在),这里是@almas谢赫首次提出(感谢你,孩子)的方法:

sed 's/\([0-9]\)\.\([0-9]\)/\1,\2/g' 

回答

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' 
0

试着这么做:

sed 's/\([0-9]\)\.\([0-9]{1,2}\)/\1,\2/g' myfile.txt 
+0

当'.'后面有两个以上的十进制字符时失败,如'Speed.Other.Thing ....:33.112 H/s'。 – 2015-01-04 16:21:52

+0

我没有明白吗?当我运行'回声“almas.shaikh .... 2.34 3.2222”|上面的命令'我得到'almas.shaikh .... 2,34 3,2222'我认为是正确的? – SMA 2015-01-04 17:49:40

+0

Original Post proposal:使用逗号',而不是'.',如果它后面有一个或两个十进制字符?“。数字三万可以写成'30000'或'30.000',但'300.00'不会是三万,所以我们可以肯定这个点'。'是一个浮点分隔符,并用','改变它。对不起,问题中的含糊不清。 – 2015-01-04 18:01:35

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 
1

你问什么是不可能的。穷计划如何知道像33.112这样的数字是“三万一千一百一十二”的欧洲符号还是“三十一点一二”的英语符号?

+0

我并不是要求能够区分“。”或“,”的意思的程序。我只想要一个方法(别名,脚本,命令)帮助«使用[改变]逗号',而不是'.',如果它后面有一个或两个十进制字符»,以便在我的程序中实现一些数据outputing。 – 2015-01-04 16:17:32

+0

您是否100%确定这些“某些程序”中没有一个输出三位小数?你有他们的源代码吗?如果没有,你正在踩着非常薄的冰面。 – TonyK 2015-01-04 19:52:21

+0

显然。据了解,他们是“我的节目”。无论如何,任何人为了他们自己的目的而使用这个线索的答案,顺便说一句,你必须确保你说的小数点后三位。但是,最初的问题仍然被认为是“不可能的”。 – 2015-01-04 21:18:56