i know this post is old, but thought it would be worth demonstrating functionality to allow dynamic control of character string length using basic awk.
A simple example incorporating a string of length 'var' into a printf statement
$ echo "1 foo baa\n2 baa foo" | awk -v var=6 'BEGIN{for(i=1;i<=var;i++) l=l "-" }{printf "%s" l "%s" l "%s\n",$1,$2,$3}' 
1------foo------baa
2------baa------foo
You can either split the format string and insert your character string as I've done above. Or you can give the string it's own format specifier
$ echo "1 foo baa\n2 baa foo" | awk -v var=6 'BEGIN{for(i=1;i<=var;i++) l=l "-" }{printf "%s%s%s%s%s\n",$1,l,$2,l,$3}' 
both output the same.
A more complicated example that column justifies text. (I've actually used basic 'print' rather than 'printf' in this case, although you could use the latter, as above).
$ echo "Hi, I know this\npost is old, but thought it would be worth demonsrating\nfunctionality to allow a dynamic control of\ncharacter string lengths using basic awk." |
 
awk '{
   line[NR]=$0 ; 
   w_length[NR]=length($0)-gsub(" "," ",$0) ;  
   max=max>length($0)?max:length($0) ;  
   w_count[NR]=NF 
}END{
   for(i=1;i<=NR;i++) 
     {
     string="" ; 
     for (j=1;j<=int((max-w_length[i])/(w_count[i]-1));j++) 
        string=string "-" ; 
     gsub(" ",string,line[i]) ; 
     print line[i]
     }
}'
Hi,--------------I--------------know--------------this
post-is-old,-but-thought-it-would-be-worth-demonsrating
functionality---to---allow---a---dynamic---control---of
character---string---lengths---using---basic---awk.