在awk中使用填充将数字转换为字符串

时间:2021-08-01 16:15:06

标签: awk

我正在尝试在 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

我错过了什么???

1 个答案:

答案 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