Shell
printf, awk …如何將帶有空格的數字格式化為千位
有沒有一種簡單的方法可以用 printf、awk、sed 分隔每千個非常大的數字?
所以 10000000000000 變成 10 000 000 000 000
謝謝
使用一些
printf
實現(包括 GNUprintf
和 GNU 系統上的 , 和(但不是 nor )的內置函式)並printf
假設您的系統具有法語(至少是法國或加拿大的),或瑞典語或斯洛文尼亞語或馬其頓語或吉爾吉斯語語言環境(以及還有一些,即那些有空格作為千位分隔符的):ksh93``zsh``bash``lksh``dash``yash
$ LC_ALL=fr_FR locale -k thousands_sep thousands_sep=" " $ LC_ALL=fr_FR printf "%'d\n" 10000000000 10 000 000 000
也適用於一些
awk
實現:$ LC_ALL=fr_FR awk 'BEGIN{printf "%'\''d\n", 1e10}' 10 000 000 000
如果您知道未設置,則可以使用
LC_NUMERIC
代替。LC_ALL``LC_ALL
你需要循環
sed
:echo "9765625000 * 1024 = 10000000000000" | sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1 \2/;ta' 9 765 625 000 * 1 024 = 10 000 000 000 000
(感謝您的改進,Stéphane!)
或者更好的可讀性,但可能與舊版本不兼容
sed
,帶有擴展的正則表達式:echo "9765625000 * 1024 = 10000000000000" | sed -E -e :a -e 's/(.*[0-9])([0-9]{3})/\1 \2/;ta' 9 765 625 000 * 1 024 = 10 000 000 000 000