Bash 删除csv中超过X列的行

Bash 删除csv中超过X列的行,bash,csv,awk,text-parsing,Bash,Csv,Awk,Text Parsing,我需要删除csv文件中超过一定列数的所有行 这是因为有时生成csv文件的代码会跳过一些值并在同一行上打印以下内容 示例:考虑下面的文件进行解析。我想删除所有超过3列的行(即标题的列): 我想要的输出文件是: timestamp,header2,header3 1,1val2,1val3 2,2val2,2val3 5val1,5val2,5val3 6,6val2,6val3 我不在乎是否缺少时间戳为4的行 我更喜欢bash中的解决方案,或者使用awk,而不是python解决方案,这样我就可以

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

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

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

我想要的输出文件是:

timestamp,header2,header3
1,1val2,1val3
2,2val2,2val3
5val1,5val2,5val3
6,6val2,6val3
我不在乎是否缺少时间戳为4的行

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

尝试以下操作(不要忽略替换文件路径和max列):

#/bin/bash
filepath=test.csv
最大列数=3
对于$(cat$文件路径)中的行;
做
计数=$(回显“$line”| grep-o”,“| wc-l)
如果[$($count+1))-le$max\u列]
然后
回音$线
fi
完成
将其复制到
.sh
文件中(例如crapper.sh),使其可执行
chmod+x crapper.sh
并运行
/crapper.sh

这将只输出有效的行。然后,您可以通过以下方式在文件中捕获结果:


/crapper.sh>result.txt

这可以通过
awk
直接完成:

awk -F, 'NF<=3' file

你尝试过自己解决吗?这是一个漂亮而聪明的解决方案,你可以用它来代替我的。非常感谢。出于好奇,如果我只想要正好有3列的行呢?我试过了,但我不能简单地替换“@Paolo,你做得很好
awk-F,'NF==3'文件是一个不错的选择。非常感谢您的回复和宝贵时间!
awk -F, 'NF<=3' file
$ awk -F, 'NF<=3' a
timestamp,header2,header3
1,1val2,1val3
2,2val2,2val3
5val1,5val2,5val3
6,6val2,6val3