我试图将任何数字从数字转换为新的形式,其中每三个数字由数字的结尾开始用点分隔。如何用千位分隔符打印数字?
这样,这个文件:
1000
10000
100000
1000000
应该改为:
1.000
10.000
100.000
1.000.000
我试图找到一个sed的命令,所有这些数字转换成表格。
我知道sed 's/.\{3\}/&,/g'
做了类似的事情,但是这是从数字的开始而不是从结尾开始。
我试图将任何数字从数字转换为新的形式,其中每三个数字由数字的结尾开始用点分隔。如何用千位分隔符打印数字?
这样,这个文件:
1000
10000
100000
1000000
应该改为:
1.000
10.000
100.000
1.000.000
我试图找到一个sed的命令,所有这些数字转换成表格。
我知道sed 's/.\{3\}/&,/g'
做了类似的事情,但是这是从数字的开始而不是从结尾开始。
您可以使用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
使用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十进制值,应该包含千位分隔符。这只适用于支持这些字符的语言环境。
权,和往常一样,如果你使用'\ 047'而不是用''''来表示''',那么它可以在任何操作系统中的任何上下文中工作,并且该脚本是从命令行调用还是存储在文件中并作为'awk -f script'调用。 –
我实际上在sed中需要它,但感谢优雅的解决方案。问题是不能使用GNU awk,因为它必须在没有GNU awk的系统上工作。 –
谢谢你的提示,这正是我正在寻找的地方。 –