我在Linux服务器中有一个csv文件,该文件有多行,字段差异很大。我想确保所有记录都有最大列数(空值)作为具有最大列数的行。我需要在bash脚本中实现这一点。我想尝试使用awk,如果可能的话,我只是bash的新手。
答案 0 :(得分:5)
awk
救援。
您可以使用T.J。的示例输入文件
$ awk -F, -v OFS=, 'NR==FNR{if(max<NF)max=NF;next};
{NF=max}1' file{,}
1,2,3,4,5,
1,2,3,4,,
1,2,3,,,
1,2,3,4,5,6
说明:这是一个双通算法,在第一轮计算最大值并在第二轮中使用。
NR==FNR
仅对第一个文件为真,计算最大值,请注意不需要初始化最大值,因为默认值为零且长度为非负值。 next
跳过脚本的其余部分。在第二轮设置中,NF=max
用较少的字段填充记录。 1
用作基于awk
默认值的打印(或任何真实语句)的简写。同样file{,}
解析为file file
两次使用同一文件进行双遍算法。
使用数组和END块也可以使用单遍写入。