如何在不在 AWK 中循环的情况下创建具有 x 个相同字符的字符串?
How to create a string with x numbers of the same character without looping in AWK?
我正在尝试在 AWK 中编写一个 CSV join 程序,它将 first.csv
文件与 second.csv
文件。假设两个文件中的行数相同,该程序现在可以完美运行。
当其中一个文件包含的行多于另一个文件时,就会出现问题;在这种情况下,我必须向行数较少的文件添加多个逗号(这取决于输入文件中的字段数),这样列就不会错位。
问题是,如何创建和分配包含不同数量逗号的字符串?例如,
if: NumberOfFields==5
;然后,我想创建字符串 ",,,,,"
并将其添加到 Array[i].
这是另一个答案,其中包含使用您的变量和数组名称的示例代码。
BEGIN {
NumberOfFields=5;
i=1;
Array[i] = gensub(/0/, ",", "g", sprintf("%0*d", NumberOfFields, 0));
print Array[i];
}
运行 它与 awk -f x,awk
其中 x.awk 是文本文件中的上述代码。请注意,它始终至少打印 1 个逗号,即使您指定零也是如此。
$ awk -v num=3 'BEGIN {var=sprintf("%*s",num,""); gsub(/ /,",",var); print var}'
,,,
$
使用数组代替您喜欢的 var
if/when。请注意,与发布的另一个解决方案不同,上面的解决方案适用于任何 awk,而不仅仅是 gawk,如果请求的数字为零,它不会打印任何逗号:
$ awk -v num=0 'BEGIN {var=sprintf("%*s",num,""); gsub(/ /,",",var); print var}'
$
GNU awk 和 gensub() 的等价物是:
$ awk -v num=3 'BEGIN {var=gensub(/ /,",","g",sprintf("%*s",num,"")); print var}'
,,,
$
$ awk -v num=0 'BEGIN {var=gensub(/ /,",","g",sprintf("%*s",num,"")); print var}'
$
我正在尝试在 AWK 中编写一个 CSV join 程序,它将 first.csv
文件与 second.csv
文件。假设两个文件中的行数相同,该程序现在可以完美运行。
当其中一个文件包含的行多于另一个文件时,就会出现问题;在这种情况下,我必须向行数较少的文件添加多个逗号(这取决于输入文件中的字段数),这样列就不会错位。
问题是,如何创建和分配包含不同数量逗号的字符串?例如,
if: NumberOfFields==5
;然后,我想创建字符串 ",,,,,"
并将其添加到 Array[i].
这是另一个答案,其中包含使用您的变量和数组名称的示例代码。
BEGIN {
NumberOfFields=5;
i=1;
Array[i] = gensub(/0/, ",", "g", sprintf("%0*d", NumberOfFields, 0));
print Array[i];
}
运行 它与 awk -f x,awk
其中 x.awk 是文本文件中的上述代码。请注意,它始终至少打印 1 个逗号,即使您指定零也是如此。
$ awk -v num=3 'BEGIN {var=sprintf("%*s",num,""); gsub(/ /,",",var); print var}'
,,,
$
使用数组代替您喜欢的 var
if/when。请注意,与发布的另一个解决方案不同,上面的解决方案适用于任何 awk,而不仅仅是 gawk,如果请求的数字为零,它不会打印任何逗号:
$ awk -v num=0 'BEGIN {var=sprintf("%*s",num,""); gsub(/ /,",",var); print var}'
$
GNU awk 和 gensub() 的等价物是:
$ awk -v num=3 'BEGIN {var=gensub(/ /,",","g",sprintf("%*s",num,"")); print var}'
,,,
$
$ awk -v num=0 'BEGIN {var=gensub(/ /,",","g",sprintf("%*s",num,"")); print var}'
$