gawk的printf函数可以设置填充字符吗?

gawk的printf函数可以设置填充字符吗?

默认情况下,gawk 用空格字符将内容填充到指定长度:

root@u2004:~# awk 'BEGIN{printf("|%+5s|\n", "abc")}'
|  abc|
root@u2004:~#

是否可以指定自定义填充字符?例如,我怎样才能得到|__abc|

答案1

不直接,而是使用 GNU awk forgensub并假设要打印的字符串中没有任何其他空格("abc"在本例中):

$ awk 'BEGIN{ print gensub(/ /,"_","g",sprintf("|%5s|","abc")) }'
|__abc|

或使用任何 awk 无论您的字符串是否包含空格:

$ awk 'BEGIN{ base=sprintf("%1000s",""); gsub(/ /,"_",base);
        str="abc"; printf "|%s%s|\n", substr(base,1,5-length(str)), str }'
|__abc|

或者:

$ awk '
    BEGIN{ printf "|%s|\n", pad("abc",5,"_") }
    function pad(str,len,chr,    base) {
       base = sprintf("%*s",len-length(str),"")
       gsub(/ /,chr,base)
       return base str
    }
'
|__abc|

答案2

不,那是行不通的。根据此参考,gawk使用printf不支持其他填充字符的函数:

https://bytes.com/topic/c/answers/219695-printf-padding-alternate-character

相关内容