确保.csv文件在bash中的每一行具有相同的列数

时间:2016-06-17 19:18:37

标签: linux bash csv awk

我在Linux服务器中有一个csv文件,该文件有多行,字段差异很大。我想确保所有记录都有最大列数(空值)作为具有最大列数的行。我需要在bash脚本中实现这一点。我想尝试使用awk,如果可能的话,我只是bash的新手。

1 个答案:

答案 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块也可以使用单遍写入。