我有一个CSV文件用','分隔,我想用它在postgres数据库中进一步处理,但不是所有的行都有正确的列数。在bash中的CSV文件清理
我正在寻找一种方法来删除所有没有指定数量(15)的分隔符的行。
我见过很多sed/awk解决方案,但没有一个能够完成我所需要的。谢谢!
我有一个CSV文件用','分隔,我想用它在postgres数据库中进一步处理,但不是所有的行都有正确的列数。在bash中的CSV文件清理
我正在寻找一种方法来删除所有没有指定数量(15)的分隔符的行。
我见过很多sed/awk解决方案,但没有一个能够完成我所需要的。谢谢!
awk -v FS=',' 'NF==16' <csv>
你可以使用Perl的一行来处理文件:
$ perl -lane '$c = $_ =~ tr/,//; print $_ if $c == 14' input_file.csv > output_file.csv
这将从input_file.csv
读取所有行,如果行包含15个逗号,将打印的行output_file.csv
为什么不是简单的'perl -F,-ane'打印如果$#F == 14'' – Sundeep
TIMTOWTDI :)肯定会工作得太快,速度会更快。 –
我认为这应该工作:
grep -e '^[^,]*\(,[^,]*\)\{15\}$' data.csv
或与红宝石:
ruby -ne 'print if $_.count(",")==15' < data.csv
也可以使用'-x'选项来指定行匹配而不是'^ $' – Sundeep
在awk中。与其他,
更换,
,算上subtitutions的数量和适量打印的:
$ awk 'gsub(/,/,",")==15' file
助攻也没有试验数据,没有输出。你只需要相信我。
试'的awk -F, 'NF == 15' file.csv' – Sundeep
@Sundeep:那些该死的off-by-一个错误;) –
@EricDuminil是啊...应该是'NF == 16'如果分隔符的数量是'15' ..与字段数量混淆... – Sundeep