awk 中的千位分隔符

Arc*_*mar 6 bash awk shell-script

我想打印千位分隔符awk's printf

在 中bash,它非常简单:

> printf "a %'d b \n" 1234567
a 1,234,567 b
> LC_NUMERIC=fr_FR.utf8
> printf "a %'d b \n" 1234567
a 1 234 567 b
Run Code Online (Sandbox Code Playgroud)

有了一个awk程序,它几乎可以工作:

> cat > print.awk
{ printf "a %'d b\n",$1}
> echo 1234567 | awk -f print.awk
a 1,234,567 b
Run Code Online (Sandbox Code Playgroud)

(Locale 好像丢了……)

并在命令行中:

> echo 1234567 | awk '{printf "%d\n",$1;}'
1234567
> echo 1234567 | awk '{printf "%'d\n",$1;}'
> echo 1234567 | awk '{printf "%\'d\n",$1;}'
Run Code Online (Sandbox Code Playgroud)

笔记

我有一个解决方法,%'d如果可能,我只想使用。

cuo*_*glm 4

只需使用一个变量来保存'

echo 1234567 | q="'" awk '{printf "%"ENVIRON["q"]"d\n", $1}'
1,234,567
Run Code Online (Sandbox Code Playgroud)

或用\047来表示'

echo 1234567 | awk '{printf "%\047d\n", $1}'
Run Code Online (Sandbox Code Playgroud)

这适用于任何 POSIX awk(不适用于mawk)。

gawk

echo 1234567 | awk '{printf "%""\x27""d\n", $1}'
Run Code Online (Sandbox Code Playgroud)