awk可以使用千位分隔符来打印数字:
$ awk "BEGIN {printf \"%'d\", 1000}"
1,000
然而,它需要一个单引号的事实意味着你必须逃脱
整个脚本中的每个"
和$
:
$ echo 1000 2000 | awk "{printf \"%'d\", \$2}"
2,000
这在这里很容易,但是对于大型例子来说可能很麻烦。我想 做这样的事情:
$ echo 1000 2000 | awk '{printf z, $2}' z="%'d"
2,000
但即使这对于高级示例来说也不是很好:
$ echo 1000 2000 | awk '{printf "hello " z " world " z, $1, $2}' z="%'d"
hello 1,000 world 2,000
我尝试弄乱OFMT
和CONVFMT
,但它们似乎没有效果:
$ echo 1000 2000 | awk '{print $2}' OFMT="%'d" CONVFMT="%'d"
2000
这些变量可以按照我尝试使用它们的方式使用,还是另一种 哪种方法可以更好地处理报价问题?
答案 0 :(得分:7)
要在单引号分隔的命令行脚本中嵌入单引号char,只需使用八进制转义序列\047
,只需要引用:
$ awk 'BEGIN {printf "%\047d\n", 1000}'
1,000
加分点:不要使用等效的十六进制转义序列\x27
:
$ awk 'BEGIN{print "\047foo!\047"}'
'foo!'
$ awk 'BEGIN{print "\x27foo!\x27"}'
oo!'