awk可以使用千位分隔符来打印数字:
$ awk "BEGIN {printf \"%'d\", 1000}"
1,000
Run Code Online (Sandbox Code Playgroud)
但是,它需要单引号这一事实意味着您必须遍历每个脚本"并$在整个脚本中:
$ echo 1000 2000 | awk "{printf \"%'d\", \$2}"
2,000
Run Code Online (Sandbox Code Playgroud)
这在这里很容易,但是对于大型例子来说可能很麻烦.我想做这样的事情:
$ echo 1000 2000 | awk '{printf z, $2}' z="%'d"
2,000
Run Code Online (Sandbox Code Playgroud)
但即便如此,对于高级示例来说也不是很好:
$ echo 1000 2000 | awk '{printf "hello " z " world " z, $1, $2}' z="%'d"
hello 1,000 world 2,000
Run Code Online (Sandbox Code Playgroud)
我试图搞乱OFMT和CONVFMT,但他们似乎没有任何效果:
$ echo 1000 2000 | awk '{print $2}' OFMT="%'d" CONVFMT="%'d"
2000
Run Code Online (Sandbox Code Playgroud)
这些变量可以按照我尝试使用它们的方式使用,还是另一种可以更好地处理引用问题的方法?
要在单引号分隔的命令行脚本中嵌入单引号char,只需在\047任何需要引号的地方使用八进制转义序列:
$ awk 'BEGIN {printf "%\047d\n", 1000}'
1,000
Run Code Online (Sandbox Code Playgroud)
加分点:不要使用等效的十六进制转义序列\x27:
$ awk 'BEGIN{print "\047foo!\047"}'
'foo!'
$ awk 'BEGIN{print "\x27foo!\x27"}'
oo!'
Run Code Online (Sandbox Code Playgroud)
见http://awk.freeshell.org/PrintASingleQuote