我正在尝试在 AWK 中编写 CSV加入程序,该程序将first.csv
文件与second.csv
文件相连接。假设两个文件中的行数相同,程序现在可以正常工作。
当其中一个文件包含的行多于另一个文件时,会出现问题;在这种情况下,我必须在行数较少的文件中添加多个逗号(这取决于输入文件中的字段数),以便列不会错位。
问题是,如何创建和分配包含不同逗号数的字符串?例如,
if: NumberOfFields==5
;然后,我想创建字符串",,,,,"
并将其添加到Array[i].
答案 0 :(得分:4)
以下是使用变量和数组名称的示例代码的另一个答案。
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个逗号。
答案 1 :(得分:1)
$ awk -v num=3 'BEGIN {var=sprintf("%*s",num,""); gsub(/ /,",",var); print var}'
,,,
$
如果/您愿意,请使用数组而不是var
。请注意,与上面发布的另一个解决方案不同,上面的内容将适用于任何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}'
$