2015-07-16 5 views
1

Я живу в Голландии, а валюта указана с помощью komma (,) вместо точки (.) Iefeeds с 14.95 вместо этого интерпретируется как число из 14,95 в евроКоманда Linux для изменения xx.xx в xx, xx (для валюты)

Есть ли команда LINUX (sed?), которая может решить эту проблему? Так 14,95 превращается в 14,95

Я пытался заменить точку с Komma, но подача имеет ряд правильных ползунков, которые также заменены

+0

использовать gettext и locales .... это лучший способ использовать материал, связанный с языком. –

ответ

0

Эта команда sed заменяет «.» между цифрами с запятой (Komma)

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

Если на линии требуется более одной цены, вам нужно g. Почему бы вам не использовать + вместо *? –

+0

Да, если есть более одной цены, нам нужно g. '+' не поддерживается в некоторых версиях sed. Используя *, как это, мы можем сделать это более портативным. –

+0

Справа, я забыл. –

0

Предполагая, что законные полные остановки в других областях вы можете использовать awk для изменения только поля валюты и игнорировать любые «.». в других областях. Вот рядный пример, когда валюта находится в поле 2:

echo "field1 19.45 field3" | awk '{gsub("\\.",",",$2);print $0}' 

Вы можете сделать то же самое с входным файлом,

awk '{gsub("\\.",",",$2);print $0}' in_file > out_file 
+0

Ваш вариант из файла не работал (другой вариант я не пробовал) – Peter

+0

Вы изменили «in_file» для вашего фактического имени файла? И вы изменили $ 2 на номер поля в файле? Какие разделители вы используете? Если вам нужно слишком изменить его из пробела, вы можете использовать '-F" d "' где d - разделитель. Возможно, мы могли бы помочь больше, если вы могли бы поделиться линией с файлом? –

0

Если все записи в файле, вы могли бы сделать

cat file | awk -F\. '{print $1","$2}' > newfile 
0

Если вы используете Setlocale, вы просто должны использовать следующую точку входа в программу (в начале основного()):

#include <locale.h> 
... 
int main (int argc, char **argv) 
{ 
    setlocale(LC_ALL, ""); 
    ... 

(конечно, вы можете использовать setlocale(LC_NUMERIC, ""); только влияет на цифровой печати)

получить Е() и двоюродные начать печать десятичной точки в локали, в которой вы находитесь (конечно, если вы настроили ее в своей среде). См. Справочную страницу для полной документации.

Смежные вопросы