我制作了一个程序,该程序从文件中读取数据并将其插入表中。
每行都有变量,并且每两个变量之间都有一个逗号。每行都是表的不同行。我想制作一个UNIX脚本,该脚本将用100行打开文件,并读取脚本会找到的每行和计数,
。之后,我希望它编辑每行并用,
填充线,直到计数为50。
例如,我需要每行才有50个逗号(,
)。如果我读了一条线并具有30 ,
,我想在此行中添加其他20个逗号。
(line1)
9,15040113501460,0,b1 0035569144,91 302317960883,0,15040113501460,132,15040614170560,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 003st69144,1
(line2)
9,15350114601560,0,b1 0033765345,91 304294596921,0,15040113501560,132,15040610170260,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 0031r69144,1
这是文件的格式。每行都是这样的。
说明:
该程序期望读取50个变量。因此,它预计49 ,
。当文件像上面的文件时,它具有较少的变量时,我将面临错误。因此,我需要UNIX中的脚本来添加缺少的,
,以便将它们作为null
。
您可以使用以下尴尬代码:
awk -F"," 'NF < 50 {printf $0; for(i = NF; i < 50; ++i) printf ","; printf "n" }' file
产生
9,15040113501460,0,b1 0035569144,91 302317960883,0,15040113501460,132,15040614170560,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 003st69144,1,,,,,,,,,,,,,,,,,,,,
9,15350114601560,0,b1 0033765345,91 304294596921,0,15040113501560,132,15040610170260,N,0,0,0,0,0,0,0,0,0,0,8,0,0000000000000000,0,0,2,,27,b1 0031r69144,1,,,,,,,,,,,,,,,,,,,,
在这里,NF
是每行中的字段数,F
是字段分离器。规则SASYS如果您的50个字段(49个逗号),我们将添加这些字段。
我已经使用了相同的方法,但是我注意到它在末尾产生了额外的逗号,所以我对原件进行了调整以在末尾不添加逗号:
awk -F, 'NF <= 50 {printf $0; for(i = NF; i < 50; ++i) printf ","; printf "n" }'