以千位分隔符引用
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
我试过弄乱OFMT
和CONVFMT
,但它们似乎没有效果:
$ 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!'
这建立在 的基础上,将打印
找到 %d
时的分隔符:
awk '
func t(u) {
return gensub("%d", "%7d", "g", u)
}
{
printf t("hello %d world %d"), ,
}
'
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
我试过弄乱OFMT
和CONVFMT
,但它们似乎没有效果:
$ 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!'
这建立在 %d
时的分隔符:
awk '
func t(u) {
return gensub("%d", "%7d", "g", u)
}
{
printf t("hello %d world %d"), ,
}
'