awk执行printf时不小心遇到了报错fatal: not enough arguments to satisfy format string,看一篇文章https://blog.csdn.net/wireless_tech/article/details/6576861 说fatal: not enough arguments to satisfy format string是只有在日志较多的情况下才会出现,而一般平时用少量日志进行测试的时候不会错,这样的解释是有问题的,为什么日志较多的时候会出现?这个命令不能应对日志较多的情况吗?而在另一篇文章:http://blog.sina.com.cn/s/blog_6987dcaa01014v10.html 中看到说会遇到一些特殊字符如&会碰到这种错误,于是我特别进行了尝试,但没有看到在有这个字符的情况下会出现这个错误。报错复原如下:本文地址:http://www.04007.cn/article/792.html,未经许可,不得转载.
user@n127:~$ awk -F":" '{printf "%6s--%6s\n" $1 $2}' a.txt awk: cmd. line:1: (FILENAME=a.txt FNR=1) fatal: not enough arguments to satisfy format string `%6s--%6s erwq' ^ ran out for this one本文地址:http://www.04007.cn/article/792.html,未经许可,不得转载.
实际看这个报错的意思指的是参数不足,所以认真看看参数足了吗?认真排查会发现printf后面的参数间需要使用逗号分隔开来,这个错误提示也很明确地指向了这个问题,printf后面可以使用括号也可以不使用括号,但是参数间的分隔符号不能少,如果少了printf会自动将后面这些参数连接在一起形成一个参数,从而报错,如下示例:本文地址:http://www.04007.cn/article/792.html,未经许可,不得转载.
#printf可使用括号也可不使用,并且支持2个以上参数 user@n127:~$ awk -F":" '{printf "%6s\n", $1}' a.txt erwq erwq kjre& re@ user@n127:~$ awk -F":" '{printf "%6s--%6s\n",$1,$2}' a.txt erwq-- erwq-- re kjre&-- reas re@--211,re user@n127:~$ awk -F":" '{printf ("%6s--%6s\n",$1,$2)}' a.txt erwq-- erwq-- re kjre&-- reas re@--211,re #其它%d和c%的使用 root@h127:/data/nginx/logs$ awk 'BEGIN{printf("%d%%\n",10)}' 10% root@h127:/data/nginx/logs$ awk 'BEGIN{printf "%c%\n","a"}' a% root@h127:/data/nginx/logs$ awk 'BEGIN{printf "%c%\n",a}' % root@h127:/data/nginx/logs$ awk 'BEGIN{printf "%c%\n",98}' b%本文地址:http://www.04007.cn/article/792.html,未经许可,不得转载.
从上面的示例中可以看到特殊字符并不会导致报错,printf更多修饰符和格式明细见:http://www.04007.cn/article/678.html本文地址:http://www.04007.cn/article/792.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/792.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |