如何在awk中扩展字符串

如何在awk中扩展字符串,awk,Awk,我需要在awk中的字符串末尾添加破折号(-)。破折号的数量是动态的(可以是0到1024之间的任何数字),因此不能硬编码。如何在awk中实现它 在中,可以这样实现: function gen_chars(N) { s=""; for (i=1;i<=N; i++) {s = s "-"}; return s; } 函数gen_chars(N){s=”“;for(i=1;i使用所需的字符创建一个长焊盘,并切割所需的长度,例如 awk -v size=5 'BEGIN {s="-"; for(

我需要在
awk
中的字符串末尾添加破折号(
-
)。破折号的数量是动态的(可以是0到1024之间的任何数字),因此不能硬编码。如何在awk中实现它

在中,可以这样实现:

function gen_chars(N) { s=""; for (i=1;i<=N; i++) {s = s "-"}; return s; }

函数gen_chars(N){s=”“;for(i=1;i使用所需的字符创建一个长焊盘,并切割所需的长度,例如

awk -v size=5 'BEGIN {s="-"; for(i=1;i<=10;i++) s=s s; 
                      print "string" substr(s,1,size)}' 

awk-v size=5'开始{s=“-”,对于(i=1;i这是gnu awk的一个替代方案:

$ cat file5
home
help

$ awk -vnd="15" '{$(NF+1)=sprintf("%*s",nd,"-");gsub(/[ ]/,"-",$NF)}1' file5   #nd=number of dashes
home ---------------
help ---------------
另一种选择是使用最大破折号(即1024)的文本/var,并使用printf限制最大宽度:

$ md=$(printf '%.s-' {1..1024})   #md=max dashes = 1024
$ awk -vmd=$md -vnd="15" '{printf "%s%.*s\n",$0,nd,md}' file5    #nd=size of dashes
home---------------
help---------------
对于gensub(),使用GNU awk:

对于其他AWK:

function gen_chars(n,   s) { s=sprintf("%*s",n,""); gsub(/ /,"-",s); return s }

输入文本和预期输出在哪里?如何确定要添加的破折号数?
function gen_chars(n,   s) { s=sprintf("%*s",n,""); gsub(/ /,"-",s); return s }