我有一個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