gawkのprintf関数はパディング文字を設定できますか?

gawkのprintf関数はパディング文字を設定できますか?

デフォルトでは、gawk は空白文字を使用して指定された長さだけコンテンツを埋めます。

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

カスタム塗りつぶし文字を指定できますか?たとえば、どのように取得できますか|__abc|

答え1

直接ではありませんが、GNU awkを使用しgensubて印刷したい文字列に他のスペースがないとします("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

関連情報