以千位分隔符引用

Quoting with thousands separator

awk 可以打印带有千位分隔符的数字:

$ awk "BEGIN {printf \"%'d\", 1000}"
1,000

然而,它需要单引号这一事实意味着你必须转义 整个脚本中的每个 "$

$ echo 1000 2000 | awk "{printf \"%'d\", $2}"
2,000

这在这里很容易,但对于大型示例可能会很麻烦。我想 做这样的事情:

$ echo 1000 2000 | awk '{printf z, }' z="%'d"
2,000

但即使这样对于高级示例也不是很好:

$ echo 1000 2000 | awk '{printf "hello " z " world " z, , }' z="%'d"
hello 1,000 world 2,000

我试过弄乱OFMTCONVFMT,但它们似乎没有效果:

$ echo 1000 2000 | awk '{print }' OFMT="%'d" CONVFMT="%'d"
2000

这些变量是否可以按照我尝试使用它们的方式使用,或者是另一个 有什么方法可以更好地处理报价问题?

要在单引号分隔的命令行脚本中嵌入单引号字符,只需在需要引号的任何地方使用八进制转义序列 7

$ awk 'BEGIN {printf "%7d\n", 1000}'
1,000

奖励点:不要使用等效的十六进制转义序列\x27

$ awk 'BEGIN{print "7foo!7"}'
'foo!'
$ awk 'BEGIN{print "\x27foo!\x27"}'
oo!'

http://awk.freeshell.org/PrintASingleQuote

这建立在 的基础上,将打印 找到 %d 时的分隔符:

awk '
func t(u) {
  return gensub("%d", "%7d", "g", u)
}
{
  printf t("hello %d world %d"), , 
}
'