在awk中,数字到字符串的填充转换



我正在尝试将数字转换为awk中的字符串。我希望我的字符串左填充0。例如,3会变成"00000003"。我有以下测试用例:

gawk 'BEGIN { CONVFMT = "%08d" ; a = 233 ; print ""a }'

233

打印"233"不是"00000233"。用a = 233.0替换a = 233不会改变任何东西。但是,用a = 233.1替换a = 233改变了一切,我的一行代码正确地打印了填充字符串:

gawk 'BEGIN { CONVFMT = "%08d" ; a = 233.1 ; print ""a }'

00000233

我错过了什么??

此处不使用CONVFMT。gawk手册上写着:

作为特殊情况,如果一个数字是整数,则将其转换为字符串总是一个整数,无论的值可以是。给定以下代码:

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

最新更新