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的解决方案,以便我可以学习如何使用它.
这可以直接用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)