2017-01-07 27 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 

或者,使用埃德莫顿的智慧:

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

如果使用\047而不是'\''代表',那么它会在任何操作系统的任何环境中工作和脚本是否被调用从命令行或存储在文件中并调用为awk -f script

对于一个给定的文件

$ cat file 
100 
1000 
10000 
100000 
1000000000 

从GNUAwk用户指南中Format Modifiers

单引号或撇号字符是一个POSIX扩展到ISO C.它表示浮点值的整数部分或整数部分ger十进制值,应该包含千位分隔符。这只适用于支持这些字符的语言环境。

+2

权,和往常一样,如果你使用'\ 047'而不是用''''来表示''',那么它可以在任何操作系统中的任何上下文中工作,并且该脚本是从命令行调用还是存储在文件中并作为'awk -f script'调用。 –

+0

我实际上在sed中需要它,但感谢优雅的解决方案。问题是不能使用GNU awk,因为它必须在没有GNU awk的系统上工作。 –