我試圖將任何數字從數字轉換爲新的形式,其中每三個數字由數字的結尾開始用點分隔。如何用千位分隔符打印數字?
這樣,這個文件:
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的系統上工作。 –
謝謝你的提示,這正是我正在尋找的地方。 –