2017-01-07 69 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的系統上工作。 –