Shell

printf, awk …如何將帶有空格的數字格式化為千位

  • January 11, 2018

有沒有一種簡單的方法可以用 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

引用自:https://unix.stackexchange.com/questions/416011