删除csv中包含多于X列的行

Pao*_*olo 1 csv bash awk text-parsing

我需要删除csv文件中具有超过一定数量列的所有行.

发生这种情况是因为有时生成csv文件的代码会跳过某些值并在同一行上打印以下内容.

示例:考虑要解析的以下文件.我想删除所有超过3列的行(即标题的列):

timestamp,header2,header3
1,1val2,1val3
2,2val2,2val3
3,4,4val2,4val3
5val1,5val2,5val3
6,6val2,6val3
Run Code Online (Sandbox Code Playgroud)

我想要的输出文件是:

timestamp,header2,header3
1,1val2,1val3
2,2val2,2val3
5val1,5val2,5val3
6,6val2,6val3
Run Code Online (Sandbox Code Playgroud)

我不在乎是否缺少时间戳4的行.

我更喜欢使用bash或者使用awk而不是python的解决方案,以便我可以学习如何使用它.

fed*_*qui 6

这可以直接用awk以下方式完成:

awk -F, 'NF<=3' file
Run Code Online (Sandbox Code Playgroud)

这使用包含当前行中字段数的awk变量NF.由于我们已将字段分隔符设置为逗号(使用-F,或等效-v FS=","),因此只需检查字段数何时不高于3.这可以通过以下方式完成NF<=3:如果为真,则该行将为自动打印.

测试

$ awk -F, 'NF<=3' a
timestamp,header2,header3
1,1val2,1val3
2,2val2,2val3
5val1,5val2,5val3
6,6val2,6val3
Run Code Online (Sandbox Code Playgroud)