2017-01-07 6 views
1

Я пытаюсь преобразовать любое число из числа цифр в новую форму, где каждые три цифры разделяются точкой, начиная с конца номера.Как печатать цифры с тысячами разделителей?

Таким образом, этот файл:

1000 
10000 
100000 
1000000 

должны стать:

1.000 
10.000 
100.000 
1.000.000 

Я пытаюсь найти одну SED-команду, которая преобразует все эти числа в этой форме.

Я знаю, что sed 's/.\{3\}/&,/g' делает что-то подобное, но это начинается с начала числа, а не конца.

ответ

0

Вы можете использовать rev отменить каждую строку:

$ rev input | sed 's/.../&./g;s/\.$//' | rev 
1.000 
10.000 
100.000 
1.000.000 

s/\.$// удалит иначе ведущий период на 100000:

100000 -> 000001 -> 000.001. -> 000.001 -> 100.000 
+0

Спасибо за отзыв, это именно то, что я искал. –

1

Используйте GNU awk модификатор ', чтобы иметь разделитель тысяч!

$ awk '{printf "%'\''d\n", $0}' file 
100 
1.000 
10.000 
100.000 
1.000.000.000 

Или, используя мудрость Ed Мортона:

awk '{printf "%\047d\n", $0}' file 

если вы используете \047 вместо '\'' представлять ", то он будет работать в любом контексте, в любой ОС и будет ли называется скрипт из командной строки или хранится в файле и вызывается как awk -f script.

Для данного файла

$ cat file 
100 
1000 
10000 
100000 
1000000000 

От руководства GNU AWK пользователя в Format Modifiers:

"

Одиночная кавычка или апостроф является расширением POSIX в ISO C. Это указывает, что целая часть значения с плавающей запятой или вся часть inte ger decimal, должен иметь в нем символ-разделитель тысяч. Это работает только в локалях, поддерживающих такие символы.

+2

право, и как всегда, если вы используете '\ 047' вместо '' \ '' 'представлять' '', тогда он будет работать в любом контексте в любой ОС и будет ли сценарий вызываться из командной строки или храниться в файле и вызываться как 'awk -f script'. –

+0

Мне на самом деле это нужно было в sed, но спасибо за элегантное решение. Проблема в том, что нельзя использовать GNU awk, потому что он должен работать с системами без GNU awk. –