我正在尝试将数字转换为 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
我错过了什么???
CONVFMT这里不使用。gawk 手册中写道:
作为一种特殊情况,如果数字是整数,那么无论 CONVFMT 的值是什么,将其转换为字符串的结果始终是整数。给出以下代码:
Run Code Online (Sandbox Code Playgroud)CONVFMT = "%2.2f" a = 12 b = a ""b 的值为“12”,而不是“12.00”。
即使使用 233.0,它也不会打印 00000233:
$ gawk 'BEGIN { CONVFMT = "%08d" ; a = 233.0 ; print ""a }'
233
Run Code Online (Sandbox Code Playgroud)
你应该使用sprintf来实现你想要的:
$ gawk 'BEGIN { a=233; name=sprintf("%08d",a); print name }'
00000233
Run Code Online (Sandbox Code Playgroud)