如何用千位分隔符打印数字?

时间:2017-01-07 19:50:40

标签: sed format

我正在尝试将任意数字从数字转换为新形式,其中每三位数字都以数字末尾的点分隔。

这样,这个文件:

1000
10000
100000
1000000

应该成为:

1.000
10.000
100.000
1.000.000

我正在尝试找到一个将所有这些数字转换为该形式的sed命令。

我知道sed 's/.\{3\}/&,/g'做了类似的事情,但是从数字的开头而不是结尾开始。

2 个答案:

答案 0 :(得分:1)

使用GNU awk' '修饰符有千位分隔符!!

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

或者,使用Ed Morton的智慧:

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

如果您使用\047代替'\''来代表'然后它可以在任何操作系统的任何上下文中工作,无论脚本是从命令行调用还是存储在文件中,并作为awk -f script调用。

对于给定的文件

$ cat file
100
1000
10000
100000
1000000000

来自Format Modifiers中的GNU awk用户指南:

  

<强>&#39;

     

单引号或撇号字符是ISO C的POSIX扩展名。它表示浮点值的整数部分或整数十进制值的整个部分应包含千位分隔符。这仅适用于支持此类字符的区域设置。

答案 1 :(得分: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