2015-01-04 109 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