Это выход пример я получаю в некоторых программах:Linux оболочки: Изменение десятичного (флоат) разделитель от точки до запятой
$ 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
Я думаю, что это может быть сделано с помощью СЕПГ AWK, Perl или, возможно, даже расширение оболочки, но я не очень разбираюсь в этом.
Не могли бы вы мне помочь, пожалуйста?
EDIT-1: Даже если этот вопрос запрашивает решения для «одного или двух чисел за точкой» в качестве метода различения запятой для тысяч, для тех, кто прибывает сюда, заинтересован в не таких ограничениях (и до тех пор, пока заголовок мог предположить, что он не существует), вот способ, во-первых, предложенный @almas Шейхом (спасибо тебе, мальчик):
sed 's/\([0-9]\)\.\([0-9]\)/\1,\2/g'
Ошибка при наличии более двух знаков после запятой после '.', как в' Speed.Other.Thing ....: 33.112 H/s'. –
Я не понял? когда я запускаю «эхо» almas.shaikh .... 2.34 3.2222 "| выше command' я получаю 'almas.shaikh .... 2,34 3,2222', который, я думаю, верен? – SMA
Первоначальное предложение: «использование запятой', 'вместо' .', если за ним стоит один или два десятичных символа ». Число тридцать тысяч может быть написано '30000' или' 30.000', но '300.00' никогда не будет тридцать тысяч, поэтому мы можем быть уверены, что эта точка'.'является разделителем по плавающей позиции и меняет его на', '. Извините за двусмысленность в вопросе. –