Bash 删除csv中超过X列的行
我需要删除csv文件中超过一定列数的所有行 这是因为有时生成csv文件的代码会跳过一些值并在同一行上打印以下内容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解决方案,这样我就可以
示例:考虑下面的文件进行解析。我想删除所有超过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