Awk

是否可以為 gawk 的 printf 函式設置填充字元?

  • June 4, 2022

預設情況下,gawk 使用空格字元將內容填充到指定長度:

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

是否可以指定自定義填充字元?例如,我怎樣才能得到|__abc|

不是直接,而是使用 GNU awkgensub並假設您的字元串中沒有任何其他空白要列印("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|

引用自:https://unix.stackexchange.com/questions/704960