我正在尝试在 awk 中将数字转换为字符串。我希望我的字符串左填充零。例如,3 将变成“00000003”。我有以下测试用例:
gawk 'BEGIN { CONVFMT = "%08d" ; a = 233 ; print ""a }'
233
它打印“233”而不是“00000233”。 用 a = 233.0 替换 a = 233 不会改变任何东西。 但是,将 a = 233 替换为 a = 233.1 会改变一切,并且我的单行正确打印了填充字符串:
gawk 'BEGIN { CONVFMT = "%08d" ; a = 233.1 ; print ""a }'
00000233
我错过了什么???
答案 0 :(得分:4)
CONVFMT
此处未使用。在 gawk 手册中它说:
作为一种特殊情况,如果一个数是整数,则结果为 将其转换为字符串始终是整数,无论是什么 CONVFMT 的值可能是。给定以下代码:
CONVFMT = "%2.2f"
a = 12
b = a ""
b 的值为“12”,而不是“12.00”。
即使使用 233.0 也不会打印 00000233:
$ gawk 'BEGIN { CONVFMT = "%08d" ; a = 233.0 ; print ""a }'
233
您应该使用 sprintf
来实现您想要的:
$ gawk 'BEGIN { a=233; name=sprintf("%08d",a); print name }'
00000233