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

Art*_*r P 5 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

我错过了什么???

Ark*_*zyk 3

CONVFMT这里不使用。gawk 手册中写道:

作为一种特殊情况,如果数字是整数,那么无论 CONVFMT 的值是什么,将其转换为字符串的结果始终是整数。给出以下代码:

   CONVFMT = "%2.2f"
   a = 12
   b = a ""
Run Code Online (Sandbox Code Playgroud)

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)

  • @ArturP:我建议 `gawk 'BEGIN { a=233; 名称=sprintf("%08d",a); 打印名称}'` (2认同)